これには少し視覚化が必要なので、私の説明がうまくいかない場合は申し訳ありません。
したがって、0,0 に中心点があります。この時点から、半径 350 ピクセル (乱数) の円周上にランダムな点をプロットしています。このために、私はこのコードを使用しています:
var angle = Math.random()*Math.PI*2;
var x = Math.cos(angle)*radius;
var y = Math.sin(angle)*radius;
x+=parent.position.x;
y+=parent.position.y;
これは、プロットされる各ポイントが中央ノードとしても機能し、ノードなどとして機能する子を持つためです。これは、新しいノードの位置をその親の位置に相対的に設定するだけです。
したがって、このコードはセントラル ノードで完全に機能します。問題は、中心から分岐した後、ノードの大きなクラスターが互いに干渉するのを避けるために、特定の方向に移動し続けたいということです。したがって、このコードは円周上の点をプロットしますが、円周のセグメント上に点をプロットできる必要があります。たぶん、円周の約3分の1がアクセスできるはずだと考えています。もう1つの障害は、これが円周の正しいセグメントでなければならないことです。つまり、ノードが上向きに分岐している場合、セグメントを円周の下半分にしたくない場合、ブランチは上向きに移動し続ける必要があります。
親の位置に対する新しい親ノードの位置に基づいて、一般的な方向を確立できます。しかし、このデータを使用してフィールドをこの方向のセグメントに縮小する方法についてのアイデアはありますか?
それが意味をなさない場合はお知らせください。図なしで説明するのはちょっと難しいです。