スパイラル パス上のポイントの分布を計算するアルゴリズムが必要です。
このアルゴリズムの入力パラメータは次のとおりです。
- ループの幅(一番内側のループからの距離)
- ポイント間の固定距離
- 描画するポイントの数
描くらせんはアルキメデスのらせんで、得られる点は互いに等距離でなければなりません。
アルゴリズムは、単一点のデカルト座標のシーケンスを出力する必要があります。次に例を示します。
ポイント 1: (0.0) ポイント 2: (..., ...) ........ ポイント N (..., ...)
プログラミング言語は重要ではなく、すべての助けが大歓迎です!
編集:
私はすでにこのサイトからこの例を取得して変更しています:
//
//
// 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);
}
}
しかし、点の配置が間違っています。点は互いに等距離ではありません。
正しい分布の例は、左の画像です。