1

これは実際のプログラミングの質問というよりも数学の質問ですが、私はC++andを使用しCOCOS2D-Xているので、ここに投稿することにしました。

CCBezierToスプライトが実行するベジエの動きを作成するために使用していますmySprite。この構造体は、 、、およびの 3 つの点 ( )CCBezierConfigを受け入れます。2 つの は、ベジエがカーブするポイントです。CCPointcontrolPoint_1controlPoint_2endPointcontrolPoint

ここで質問です。曲線を作成するために必要な sはcontrolPoint不明であり、少し計算することによってのみ取得できます。これらは既知の変数です。下の図を参照してください。

A = The start point of the curve
B = The end point of the curve
Line AB = The line created by connecting A and B together
L = The distance between A and B/The length of Line AB
D = The distance between the line and the unknown points

X と Y を探しています。すでにこれを少し達成していますが、線が水平または垂直の場合のみです。

// From left to right:
ccBezierConfig bezierConfig;
bezierConfig.controlPoint_1 = CCPointMake( A.x + ( L * 0.25f ), A.y + aCertainHeight );
bezierConfig.controlPoint_2 = CCPointMake( A.x + ( L * 0.75f ), A.y - aCertainHeight );
bezierConfig.endPoint = B;

/** CCPointMake( x, y ) is a macro that creates a CCPoint object, which is a point on a plane. 
    It accepts two float values determining the X and Y position of the point.**/

// From top to bottom:
ccBezierConfig bezierConfig;
bezierConfig.controlPoint_1 = CCPointMake( A.x + aCertainWidth, A.y - ( L * 0.25f ) );
bezierConfig.controlPoint_2 = CCPointMake( A.x - aCertainWidth, A.y - ( L * 0.25f ) );
bezierConfig.endPoint = B;

線が対角線の場合、X と Y を取得するにはどうすればよいですか?

ケース 1: ラインは左から右に始まります ケース 1: ラインは左から右に始まります

ケース 2: ラインは左上から右下へ ケース 2: ラインは左上から右下へ

ケース 3: 線は右上から左下へ ケース 3: 線は右上から左下へ

前もって感謝します。

4

1 に答える 1

2

ステップ 1: A から B へのベクトルを計算し、それを と呼びますv

ステップ 2: そのベクトルに垂直なベクトルを単位長で計算します。それを呼び出しますw。一般(-y, x)に と(y, -x)は両方とも に垂直(x, y)です。前者は「左」、後者は「右」を指します。

ステップ 3:と同様に を計算Xします。A + 0.25 * v + D_1 * wY

これはすべて次のように機能すると思います。

// Using a "point" type for a vector is dodgy, but it works.
w = CCPointMake((B.y - A.y) / L, -(B.x - A.x) / L);
X = CCPointMake(
    0.75 * A.x + 0.25 * B.x + D_1 * w.x,
    0.75 * A.y + 0.25 * B.y + D_1 * w.y,
);
Y = CCPointMake(
    0.25 * A.x + 0.75 * B.x + D_2 * w.x,
    0.25 * A.y + 0.75 * B.y + D_2 * w.y,
);

または類似。

cocos2d に 2 次元ベクトル用の別の型がある場合は、それを使用します(B - A)/L

于 2012-10-15T10:10:20.410 に答える