Tôi cần một thuật toán để tính toán phân bố các điểm trên đường xoắn ốc.Vẽ các điểm cách đều nhau trên hình xoắn ốc
Các thông số đầu vào của thuật toán này sẽ là:
- Chiều rộng của vòng lặp (khoảng cách từ vòng lặp trong cùng)
- Cố định khoảng cách giữa các điểm
- Số điểm để vẽ
Hình xoắn ốc để vẽ là xoắn ốc archimedean và các điểm thu được phải là cách đều nhau từ mỗi khác.
Thuật toán nên in ra một chuỗi các tọa độ Descartes của điểm duy nhất, ví dụ:
điểm 1: (0.0) điểm 2: (..., ...) .... .... Điểm N (..., ...)
Ngôn ngữ lập trình không quan trọng và tất cả giúp đánh giá cao!
EDIT:
Tôi đã có được và sửa đổi mẫu này từ trang web này:
//
//
// centerX-- X origin of the spiral.
// centerY-- Y origin of the spiral.
// radius--- Distance from origin to outer arm.
// sides---- Number of points or sides along the spiral's arm.
// coils---- Number of coils or full rotations. (Positive numbers spin clockwise, negative numbers spin counter-clockwise)
// rotation- Overall rotation of the spiral. ('0'=no rotation, '1'=360 degrees, '180/360'=180 degrees)
//
void SetBlockDisposition(float centerX, float centerY, float radius, float sides, float coils, float rotation)
{
//
// How far to step away from center for each side.
var awayStep = radius/sides;
//
// How far to rotate around center for each side.
var aroundStep = coils/sides;// 0 to 1 based.
//
// Convert aroundStep to radians.
var aroundRadians = aroundStep * 2 * Mathf.PI;
//
// Convert rotation to radians.
rotation *= 2 * Mathf.PI;
//
// For every side, step around and away from center.
for(var i=1; i<=sides; i++){
//
// How far away from center
var away = i * awayStep;
//
// How far around the center.
var around = i * aroundRadians + rotation;
//
// Convert 'around' and 'away' to X and Y.
var x = centerX + Mathf.Cos(around) * away;
var y = centerY + Mathf.Sin(around) * away;
//
// Now that you know it, do it.
DoSome(x,y);
}
}
Nhưng sự sắp xếp của điểm là sai, những điểm không cách đều nhau.
Ví dụ phân phối đúng là là hình ảnh bên trái:
Khi bạn nói cách đều, bạn có nghĩa là khoảng cách không đổi theo đường thẳng (đường thẳng) từ điểm này sang điểm tiếp theo hay ý bạn là khoảng cách dọc theo đường xoắn ốc? (Tôi đoán bạn có thể muốn sau này, nhưng các giai điệu hiện tại âm thanh gần gũi hơn với trước đây). –
Xin chào Jerry. Cảm ơn trước. Tôi có nghĩa là khoảng cách không đổi dọc theo con đường xoắn ốc. Tôi nghĩ rằng cả hai khoảng cách đều giống nhau, nhưng khoảng cách dọc theo đường cong chính xác hơn. (MAYBE!) –
[Wolfram] (http://mathworld.wolfram.com/images/equations/ArchimedesSpiral/Inline3.gif) đưa ra phương trình cho một chiều dài dọc theo hình xoắn ốc. Ít nhất là trong nháy mắt đầu tiên, sắp xếp lại để có được một góc cho một khoảng cách nhất định trông giống như thao tác đại số khá đơn giản (mặc dù tôi cho rằng tôi có thể đã bỏ lỡ một cái gì đó vì vậy nó khó hơn nó nhìn). –