如何在Cocoa找到线的方向?

时间:2012-10-03 11:13:25

标签: objective-c point direction

在笛卡尔坐标系中考虑 AB 线。该行的长度为 d

我需要什么:

我想在B点画一个箭头来表示线的方向。

我尝试了什么:

在p的某些x点之前放置在AB线中的

I found a point C。然后我试图找到相对于线CB在90度的点(P& Q)。但它对我不起作用。

参考此图片: enter image description here 而不是做这个复杂的步骤,有没有其他方法来找到线的方向,以正确的方向绘制正确的箭头?

请记住线可能位于任何方向。我所拥有的只是A& A点。只有B。

1 个答案:

答案 0 :(得分:4)

  1. 我认为How can I find the points in a line - Objective c?中给出的答案太复杂了。您可以使用CGPoint代替(x, y)对,使看起来更好。

  2. 您的问题中缺少一个输入参数:箭头的所需大小,例如从 C B 的距离。

    < / LI>

    话虽如此,以下计算应该对您有帮助。

    // Your points A and B:
    CGPoint A = CGPointMake(x1, y1);
    CGPoint B = CGPointMake(x2, y2);
    
    // Vector from A to B:
    CGPoint AB = CGPointMake(B.x - A.x, B.y - A.y);
    
    // Length of AB == distance from A to B:
    CGFloat d = hypotf(AB.x, AB.y);
    
    // Arrow size == distance from C to B.
    // Either as fixed size in points ...
    CGFloat arrowSize = 10.;
    // ... or relative to the length of AB:
    // CGFloat arrowSize = d/10.;
    
    // Vector from C to B:
    CGPoint CB = CGPointMake(AB.x * arrowSize/d, AB.y * arrowSize/d);
    
    // Compute P and Q:
    CGPoint P = CGPointMake(B.x - CB.x - CB.y, B.y - CB.y + CB.x);
    CGPoint Q = CGPointMake(B.x - CB.x + CB.y, B.y - CB.y - CB.x);
    

    P 是通过先从 B 中减去矢量 CB =(CB.x,CB.y)然后再加上垂直来计算的vector(-CB.y,CB.x)。