Objective c 如何在Cocoa中找到线的方向?

Objective c 如何在Cocoa中找到线的方向?,objective-c,point,direction,Objective C,Point,Direction,考虑笛卡尔坐标系中的直线AB。这条线的长度是d 我需要的是: 我想在点B上画一个箭头,代表直线的方向 我尝试的是: ,它被放置在AB线中,在B的一些x点之前。然后我试图找到点p&Q相对于CB线成90度。但这对我不起作用 请参阅此图: 除了执行这些复杂的步骤,还有其他方法可以找到直线的方向,从而在正确的方向上绘制正确的箭头吗 请记住,这条线可能位于任何方向。我只知道A点和B点 我不认为中给出的答案太复杂。通过使用CGPoint而不是x,y对,可以使它看起来更漂亮一些 您的问题中缺少一个输入参数:箭

考虑笛卡尔坐标系中的直线AB。这条线的长度是d

我需要的是:

我想在点B上画一个箭头,代表直线的方向

我尝试的是:

,它被放置在AB线中,在B的一些x点之前。然后我试图找到点p&Q相对于CB线成90度。但这对我不起作用

请参阅此图: 除了执行这些复杂的步骤,还有其他方法可以找到直线的方向,从而在正确的方向上绘制正确的箭头吗

请记住,这条线可能位于任何方向。我只知道A点和B点

我不认为中给出的答案太复杂。通过使用CGPoint而不是x,y对,可以使它看起来更漂亮一些

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

也就是说,下面的计算应该对您有所帮助

// 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);
通过先减去向量CB=CB.x,CB.y,然后再加上垂直向量-CB.y,CB.x,从B中计算出p

我不认为中给出的答案太复杂。通过使用CGPoint而不是x,y对,可以使它看起来更漂亮一些

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

也就是说,下面的计算应该对您有所帮助

// 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);

通过先减去向量CB=CB.x,CB.y,然后再加上垂直向量-CB.y,CB.x,从B计算出p。

点C可以正好位于点A的顶部,并且仍然具有90度角。你需要给我们更多关于如何确定C应该在哪里的信息。C点不是问题。此图描述了我尝试的方法。抛开所有的东西,简单地考虑两点A和B。我需要在点B中画一个箭头。现在清楚了吗?C点正好在A点的顶部,仍然有90度角。你需要给我们更多关于如何确定C应该在哪里的信息。C点不是问题。此图描述了我尝试的方法。抛开所有的东西,简单地考虑两点A和B。我需要在B点画一个箭头。现在清楚了吗?