2010-11-23 186 views
0

我有一个起点和一个终点。我想工作的角度,我有这个公式似乎工作触发三角形角度

double dx = end.X - start.X; 
double dy = end.Y - start.Y; 

double degrees = Math.Acos((-Math.Pow(dy, 2) + Math.Pow(dx, 2) + Math.Pow(dx, 2))/(2 * Math.Pow(dx, 2))); 
degrees = degrees * 180/Math.PI; 

然后我想利用角度和延长线的长度。我有这个到目前为止

end.Y = (start.Y + (len * Math.Sin(angle))); 
end.X = (start.X + (len * Math.Cos(angle))); 

现在这并没有给我正确的价值。

白原线和红色的延伸

white is original line and red is the extending

我做错WRO

+0

yopu可以发布完整的代码? – TalentTuner 2010-11-23 08:55:42

+0

通过延长线的长度意味着延长线长? – thumbmunkeys 2010-11-23 08:57:11

+1

为什么你需要角度?难道你不能简单地通过使用dx和dy值来计算新的终点,并将它们归一化,然后再乘以len? – mrjames 2010-11-23 08:57:43

回答

1

这是我在代码的意思是:

double dx = end.X - start.X; 
double dy = end.Y - start.Y; 

double dlen = Math.Sqrt(dx * dx + dy * dy); 

dx = dx/dlen; 
dy = dy/dlen; 

end.X = start.X + (dx * len); 
end.Y = start.Y + (dy * len); 
0

如果你只是想继续你行什么,首先你必须找到函数定义你的线。

这是一个“简单”的行......它的功能是f(x)= ax + b。找到一个和b。

要查找:

a = (start.y - end.y)/(start.x - end.x) 
// easy, isn't it ? 

要找到B:

b = (start.y) - (a * start.x) 
// you can check switching "start" by "end" 

没有处理的角度,余弦或鼻窦...

再见

0
如果你不

”没有斜边(你不需要)你应该使用一个正切的三角函数 像

double rads = Math.Atan(dy/dx); 

虽然我的方式涉及跟踪象限,但您的学位计算相当复杂。请参阅:http://www.mathwizz.com/algebra/help/help29.htm