2

わかりましたので、これを私ができる最善の方法で説明しようとしましょう。

「A」と「B」をプロットした 2 つの点があり、3 番目の点「C」をプロットして、点「B」を過ぎても同じ勾配に沿っているようにしようとしています。線の角度があり、コードを投稿しますが、どこから始めればよいかわかりません。

どんな助けでも素晴らしいでしょう!

私が持っているほんの少しのコード

CGPoint vector = ccpSub(touchedPoint, fixedPoint);
CGFloat rotateAngle = -ccpToAngle(vector);
4

2 に答える 2

2

これにより、すべての点が共線になるように 3 番目の点 C を追加する必要があると仮定すると、A から B に移動するベクトルを計算し、このベクトルの倍数を追加して新しい点を生成するだけです。ポイント B まで。B から C までの距離に基づいて、倍数を選択します。

例として、A = (2,2)、B = (4,3) とします。このとき、A から B へのベクトルは (2,1) で与えられます。

次に、新しいポイントが B からどれだけ離れているかを計算し、K が距離の要件を満たすように選択されたポイント B に複数の K*(2,1) を追加するだけです。

私はあなたが2Dにいると仮定していますが、同じ方法がより高い次元に適用されます

于 2012-06-15T23:56:29.493 に答える
1

私の数学はさびていますが、線形方程式は一般にy = m * x + bとして表されます。ここで、mは傾き、bはy切片です。y値の差を取り、それをx値の差で割ることにより、傾きであるmを取得できます。たとえば、A =(2,2)およびB =(4,3)の場合、mは( 3-2)/(4-2)または0.5。次に、bの線形方程式、y切片、つまりb = ym * xを解いてから、いずれかのデータポイントをプラグインします。たとえば、ポイントAのx値とy値をプラグインすると、b=が得られます。 2-0.5 * 2 =1。これで、傾きm(この例では0.5)とy切片b(この例では1)がわかったので、y = m*xを使用して任意のx値のyを計算できます。 + b、この場合はy = 0.5 * x+1。

したがって、touchedPointとfixedPointがCGPointの場合、fixedPointとtouchedPointから次のように傾きとy切片を計算できます。

double m = (fixedPoint.y - touchedPoint.y) / (fixedPoint.x - touchedPoint.x);
double b = fixedPoint.y - m * fixedPoint.x;

さて、あなたはこの3番目の点Cがどこにあるかをどのように決定したいかを言いません。ただし、たとえば、この新しい点Cのx座標を知っている場合は、次のように同じ線上にあるy座標を計算できます。

CGPoint pointC;
pointC.x = 400; // or set this to whatever you want
pointC.y = m * pointC.x + b;
于 2012-06-16T04:52:08.240 に答える