如果我有一个点和一个中心,我该如何计算相反点?

时间:2012-08-14 22:10:28

标签: objective-c trigonometry point

Image

我有一个中心点,我知道第1点,现在我想计算相反方向的第2点,但还有另一个长度。我也知道从中心点到第2点的长度,但它不在与第1点到中心的相同向量上。想象一下,虚线有另一个角度,如图所示。

点2应与点1位于同一矢量上。换句话说,点1到点2应该是一条穿过中心的直线。

我希望有人可以帮助我。

非常感谢你。

1 个答案:

答案 0 :(得分:3)

这将有效:

代码假设在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编写的,因为它是我的首选语言而你没有指定需要答案的语言。如果您有不同的语言偏好,我可以尝试将代码移植到您的首选语言(假设我知道它)。

CODE GIVEN BY:Marcello Stanisci

在目标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);
}