3

for ループでランダムな値を生成していますが、次に生成される値が他の値の近くにないかどうかをテストしたいと思います。そうであれば、許容半径の外側に配置したいと思います。これまでに持っている:

int spacing = 30;
// create a bunch of random points
for ( int i = 0; i < MAX_NUMBER_OF_DOTS; i++ )
{
    ofVec2f point( ofRandom(spacing, ofGetWidth() - (spacing + spacing)), ofRandom( spacing, ofGetHeight() - (spacing + spacing)) );

    // Loop trough previously create points and check its distance
    for ( int j = 0; j < dots.size(); j++ )
    {
        ofVec2f testPoint = dots[j];
        float minDistance = 20.0f;
        // If the point is too close move it to a random point around it
        if ( point.distance( testPoint ) < minDistance )
        {
            point.x += cos( ofRandom( TWO_PI ) ) + minDistance;
            point.y += sin( ofRandom( TWO_PI ) ) + minDistance;
        }
    }
    dots.push_back( point );
}

新しい計算されたポイントは以前に作成されたドットの近くを考慮していないため、完全ではdotsありvector<ofVec2f> dots; ません。そのため、再帰的な方法が問題の解決に役立つと思います。

4

1 に答える 1

0

幾何学的ハッシュアルゴリズムを使用して、新しく作成されたポイントが以前に作成された他のポイントに「minDistance」よりも近いかどうかを確認できます。タンパク質のコンフォメーションに適用した場合のこの方法を説明する優れた記事は、ここにあります。

于 2012-07-19T17:09:12.083 に答える