c# - 是由偏离水平面大于 45 度的两点组成的线

标签 c# math

我试图找出由两点定义的线与水平线相比是否大于或等于 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/

相关文章:

c++ - C++ 中的 RSA 加密

python - 有效检测python中的符号变化

javascript - 如何在 Asp.net MVC 中向外部 js 文件添加本地化?

c# - View 中的属性必须与 ViewModel 中的相同属性匹配

c# - 正则表达式中的匹配模式

c# - SAPbobsCOM 不工作

c# - 使用空格反序列化标记的枚举会导致 SerializationException

css - CSS3 动画计时函数 cubic-bezier() 的参数是什么意思?

algorithm - 修改后的最小硬币变化

php - php中的整数除法