2012-08-14 32 views
1

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

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

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

我希望有人能帮助我。

非常感谢您提前。

+0

'POINT2 =中心+ distance_from_center *归一化(中心 - 点1);' – Bart 2012-08-14 22:14:56

+0

由于这是一个非常数学定向问题我需要一些澄清: 这是在2D平面,如果是笛卡尔坐标或极坐标?如果在3D空间中使用矢量? – 2012-08-14 22:22:39

+0

它在2D平面。 不知道什么是极坐标 – 2012-08-14 23:00:08

回答

3

这将工作:

代码假定共线点,在二维平面上,定义为直角坐标

在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给出:马塞罗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); 
} 
+0

我在将Java代码转换为目标c时犯了一个错误。 现在我已经纠正它,它的作品就像一个魅力。 非常感谢你。 – 2012-08-15 01:04:24

+0

@MarcelloStanisci我刚刚编辑了这篇文章,如果你想重新编辑修改后的Objective C代码的帖子,这对未来的观众很有用。也可能接受答案... – 2012-08-15 01:09:17

+0

我纠正了我的代码,也许我不得不等待一点点,只是它是可见的。 我现在如何接受答案? – 2012-08-15 01:14:30

相关问题