Ho bisogno di un algoritmo per calcolare la distribuzione dei punti su un percorso a spirale.Disegna punti equidistanti su una spirale
I parametri di ingresso di questo algoritmo dovrebbe essere:
- larghezza del loop (distanza dal ciclo più interno)
- Fixed distanza tra i punti
- Il numero di punti per disegnare
La spirale da disegnare è una spirale archimedeata ei punti ottenuti devono essere equidistanti l'uno dall'altro.
L'algoritmo dovrebbe stampare la sequenza delle coordinate cartesiane di singoli punti, ad esempio:
Punto 1: (0.0) Punto 2: (..., ...) .... .... Punto N (..., ...)
Il linguaggio di programmazione non è importante e tutti sono di grande aiuto!
EDIT:
ho già capito e modificare questo esempio da questo sito:
//
//
// 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);
}
}
Ma la disposizione del punto è sbagliato, i punti non sono equidistanti tra loro.
L'esempio di distribuzione corretto è è l'immagine a sinistra:
Quando si dice equidistante, si intende una distanza costante seguendo un percorso diretto (linea retta) da un punto a quello successivo o si intende la distanza lungo il percorso della spirale? (Immagino che tu voglia il secondo, ma l'attuale frase sembra più vicina alla prima). –
Ciao Jerry. Grazie in anticipo. Intendo la distanza costante lungo il percorso della spirale. Penso che entrambe le distanze siano simili, ma la distanza lungo la curva è più accurata. (FORSE!) –
[Wolfram] (http://mathworld.wolfram.com/images/equations/ArchimedesSpiral/Inline3.gif) fornisce l'equazione per una lunghezza lungo la spirale. Almeno a prima vista, riordinare quello per ottenere un angolo per una data distanza sembra una manipolazione algebrica abbastanza semplice (anche se suppongo che avrei potuto perdere qualcosa quindi è più difficile di quanto sembri). –