计算垂直于另一条线中点的直线

时间:2012-04-19 16:16:15

标签: objective-c c math line

基本上我正在尝试计算两点之间的平分线。我有两种方法,一种是另一种方法。我无法弄清楚为什么另一个不起作用。工作的那个更加计算密集,因为这个例程运行很多,我想使用更简单的例程......除了它不起作用。我可能错过了一些简单的东西,但我发现这很有趣,因为我似乎比高中代数更好地掌握了三角形。

注意:该函数传递的是端点(endPoint1,endPoint2)。 这是有效的(使用trig来计算平分线):

CGPoint midPoint = CGPointMake((endPoint1.x + endPoint2.x) / 2, (endPoint1.y + endPoint2.y) / 2);

//Normalize an end point
CGPoint nPoint = CGPointMake(endPoint1.x - endPoint2.x, endPoint1.y - endPoint2.y);

//Find theta and rotate 90°
CGFloat theta = atanf(nPoint.y / nPoint.x);
if (nPoint.x < 0.0f) theta += M_PI;
else if (nPoint.x > 0.0f && nPoint.y < 0.0f) theta += (M_PI * 2);
theta += M_PI_2;

//Calculate another point along new theta and de-normalize the point
CGPoint centerPoint = CGPointMake(cosf(theta) * 10, sinf(theta) * 10);
centerPoint.x += midPoint.x;
centerPoint.y += midPoint.y;

//Create the line definition
LineDef def = LineDefForPoints(midPoint, centerPoint);

这是没有的,但我希望:

CGPoint midPoint = CGPointMake((endPoint1.x + endPoint2.x) / 2, (endPoint1.y + endPoint2.y) / 2);
//Calculate the slope and invert
CGFloat m = (endPoint1.y - endPoint2.y) / (endPoint1.x - endPoint2.x);
//Take the negative reciprocal 
m = -1/m;       

//Calculate another point on the line        
CGPoint centerPoint = CGPointMake(midPoint.x + 10, midPoint.y + (m * 10));
//Create the line definition
LineDef def = LineDefForPoints(midPoint, centerPoint);

所以我发誓这应该有效。 Y的变化等于x的变化的m倍。我计算了中点,计算出垂直线的斜率并计算了该线上的另一个点。但是,当给定相同的端点时,创建的线定义不等效,所以我遗漏了一些东西。

顺便说一句,LindeDef是一个简单的结构,有三个CGFloat变量用于a,b和amp; c直线的分量。从两点创建一个LineDef是微不足道的(我碰巧使用一个块来执行此操作):

LineDef (^LineDefForPoints)(CGPoint, CGPoint) = ^LineDef(CGPoint p1, CGPoint p2){
    LineDef line = {0,0,0};
    line.a = p2.y - p1.y;
    line.b = p1.x - p2.x;
    line.c = line.a*p1.x + line.b*p1.y;
    return line;
};

2 个答案:

答案 0 :(得分:0)

斜坡拦截形式对此很脆弱;使用矢量。

  

= B - A

     

midpoint = / 2 + A

     

= y , - V x >

答案 1 :(得分:0)

该死,这很简单。我重新格式化了我的实际生产代码,因此我可以把它放在Stack Exchange上,并在此过程中编辑了我的错误。我在问题中发布的代码实际上非常有效。最初的行:m = -1 / m;被折叠到原始作业中,如下所示:CGFloat m = -1 / (endPoint1.y - endPoint2.y) / (endPoint1.x - endPoint2.x);。当然,现在问题很明显......我忘了括号。我在堆栈交换中将该行分成两行,因此我可以在评论中解释我的“推理”,希望找到问题所在。

抱歉,麻烦。