作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图找出由两点定义的线与水平线相比是否大于或等于 90 度。这是我使用的代码
bool moreThan90 = false;
double angle = Math.Atan((double)(EndingLocation.Y - Location.Y) / (double)(EndingLocation.X - Location.X));
if (angle >= Math.PI / 2.0 || angle <= -Math.PI / 2.0)
moreThan90 = true;
我这样做是否正确,或者 .Net 中是否有更好的内置函数可以找到它?
编辑——实际上我搞砸了我的问题我想说 45 偏离水平而不是 90。但是答案让我到了一个我可以弄清楚的地步(真的我只需要指向 Atan2)。
最佳答案
与水平线成 90 度以上的线的 EndLocation.x 的 x 值将小于 Location.x。
所以你不需要所有 atan 废话,这应该足够了:
if (EndingLocation.X < Location.X)
moreThan90 = true;
编辑:
OP 似乎意味着 45 度而不是 90 度,这意味着上述简化不再成立。为此,最好使用 atan2(正如 Slaks 指出的那样)但本着不使用 tan 的精神:
if (Math.Abs(EndingLocation.X - Location.X) > Math.Abs(EndingLocation.Y - Location.Y) &&
EndingLocation.X < Location.X)
moreThan45 = true;
请注意,如果您只需要指向右侧的线,则只需要第二次检查
关于c# - 是由偏离水平面大于 45 度的两点组成的线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2850572/
我是一名优秀的程序员,十分优秀!