私は中心点を持っていて、点1を知っています。今、反対方向にある点2を計算したいのですが、別の長さがあります。また、中心点から点2までの長さはわかっていますが、点1から中心までの長さは同じではありません。画像が示すように、点線が別の角度を持っていると想像してください。
ポイント2は、ポイント1と同じベクトル上にある必要があります。つまり、ポイント1からポイント2は、中心を通過する直線である必要があります。
誰かが私を助けてくれることを願っています。
事前にどうもありがとうございました。
私は中心点を持っていて、点1を知っています。今、反対方向にある点2を計算したいのですが、別の長さがあります。また、中心点から点2までの長さはわかっていますが、点1から中心までの長さは同じではありません。画像が示すように、点線が別の角度を持っていると想像してください。
ポイント2は、ポイント1と同じベクトル上にある必要があります。つまり、ポイント1からポイント2は、中心を通過する直線である必要があります。
誰かが私を助けてくれることを願っています。
事前にどうもありがとうございました。
これは機能します:
コードは、デカルト座標として定義された2D平面内の同一線上の点を想定しています
Javaの場合:
class GoGo {
public static void main (String[] args) {
double[] center = new double[] { 4.0,3.0 };
double[] point1 = new double[] { 8.0,4.0 };
double[] point2 = getPoint2(center,point1,4.0);
System.out.print("X: " + point2[0] + " Y: " +point2[1]);
}
public static double[] getPoint2(double[] center, double[] point1, double distance) {
//assumes Points = double[2] { xValue, yValue }
double[] point2 = new double[2];
double changeInX = point1[0] - center[0]; // get delta x
double changeInY = point1[1] - center[1]; // get delta y
double distanceCto1 = Math.pow( // get distance Center to point1
(Math.pow(changeInX,2.0) + Math.pow(changeInY,2.0))
,0.5);
double distanceRatio = distance/distanceCto1;// ratio between distances
double xValue = distanceRatio * changeInX; // proportional change in x
double yValue = distanceRatio * changeInY; // proportional change in y
point2[0] = center[0] - xValue; // normalize from center
point2[1] = center[0] - yValue; // normalize from center
return point2; // and return
}
}
これは私の好みの言語であり、答えが必要な言語を指定しなかったため、Javaで作成しました。別の言語設定がある場合は、コードを優先言語に移植することを試みることができます(私がそれを知っていると仮定します)。
提供されたコード:Marcello Stanisci
Objective Cの場合:
- (CGPoint) getOppositePointAtCenter2:(CGPoint)center fromPoint:(CGPoint)point oppositeDistance:(double)oppositeDistance {
CGPoint vector = CGPointMake(point.x - center.x, point.y - center.y);
double distanceCenterToPoint1 = pow(pow(vector.x, 2) + pow(vector.y, 2), 0.5);
double distanceRatio = oppositeDistance / distanceCenterToPoint1;
double xValue = distanceRatio * vector.x;
double yValue = distanceRatio * vector.y;
return CGPointMake(center.x - xValue, center.y - yValue);
}