Potrzebuję algorytmu do obliczenia rozkładu punktów na spiralnej ścieżce.Rysuj równoodległe punkty na spirali
parametrów wejściowych tego algorytm powinien być:
- szerokość pętli (odległość od wewnętrznej pętli)
- stałej odległości pomiędzy punktami
- Liczba punktów zwrócić
Spirala do rysowania to spirala archimedesa, a uzyskane punkty muszą być równe od siebie.
Algorytm powinien wypisać kolejność współrzędnych kartezjańskich pojedynczych punktach, na przykład:
Punkt 1: (0,0) Punkt 2: (..., ...) .... ... Punkt N (..., ...)
Język programowania nie jest ważny, a wszystkie są mile widziane!
EDIT:
już dostać i modyfikować ten przykład z tej strony:
//
//
// 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);
}
}
Ale rozmieszczenie punktu jest źle, punkty nie są w równej odległości od siebie.
Prawidłowe przykład dystrybucja jest to obraz po lewej stronie:
Kiedy mówisz w jednakowej odległości, masz na myśli stałą odległość po bezpośredniej (prostej linii) ścieżce z jednego punktu do następnego, czy też masz na myśli odległość wzdłuż ścieżki spirali? (Domyślam się, że prawdopodobnie chcesz to drugie, ale obecne brzmienie brzmi bliższe temu pierwszemu). –
Witaj Jerry. Z góry dziękuję. Mam na myśli stałą odległość wzdłuż ścieżki spiralnej. Myślę, że obie odległości są podobne, ale odległość wzdłuż krzywej jest dokładniejsza. (MAYBE!) –
[Wolfram] (http://mathworld.wolfram.com/images/equations/ArchimedesSpiral/Inline3.gif) podaje równanie dla długości wzdłuż spirali. Przynajmniej na pierwszy rzut oka zmiana aranżacji, aby uzyskać kąt dla danej odległości, wygląda na dość prostą manipulację algebraiczną (choć przypuszczam, że mogłem coś przeoczyć, więc jest to trudniejsze niż to wygląda). –