C# 是由两个与水平面成45度角的点构成的线

C# 是由两个与水平面成45度角的点构成的线,c#,math,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 =

我试图找出由两点定义的直线与水平线相比是否大于或等于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;
bool大于90=假;
double angle=Math.Atan((double)(EndingLocation.Y-Location.Y)/(double)(EndingLocation.X-Location.X));
如果(angle>=Math.PI/2.0 | | angle您应该调用,如下所示:

double angle = Math.Atan2(EndingLocation.Y - Location.Y, 
                          EndingLocation.X - Location.X);

if (Math.Abs(angle) >= Math.PI / 2.0)
    moreThan90 = true;

与水平面成90度以上的直线的EndLocation.x值将小于Location.x

所以你不需要所有的阿坦胡说八道,这应该足够了:

if (EndingLocation.X < Location.X)
    moreThan90 = true;
if(EndingLocation.X
编辑:

似乎OP的意思是45度而不是90度,这意味着上述简化不再适用。为此,最好使用atan2(正如Slaks指出的),但本着不使用棕褐色的精神:

if (Math.Abs(EndingLocation.X - Location.X) > Math.Abs(EndingLocation.Y - Location.Y) && 
    EndingLocation.X < Location.X)
    moreThan45 = true;
if(Math.Abs(EndingLocation.X-Location.X)>Math.Abs(EndingLocation.Y-Location.Y)&
EndingLocation.X

请注意,如果您只想要指向右侧的线,则只需进行第二次检查。我无法想象有一种库方法可以找到两个向量之间的角度,如果您这样做是正确的(数学是正确的)快速浏览一下msdn和google并没有给我提供任何信息。我会使用SLaks版本的调用
Math.Atan
方法

需要注意的一件有趣的事情是,您使用“水平”作为平面来确定角度是否大于90度。如果endingLocation.x 编辑: 原来的问题改为45度检查

下面的部分讨论了如何在不按照OP的注释进行浮点除法的情况下进行此操作

为了确定你是否有45度角,我们知道一些事情,而不需要在点上调用
ATan

首先,45度角的斜率是1,如果

Math.Abs((EndLocation.y-location.y)/(EndLocation.X-location.X))>1

你有一个大于45度的角度,但是因为45度角的排列在一个圆中发生了4次。我们需要检查一些事情

如果
EndLocation.X
则角度大于45度。这表示Y轴(90-270)左侧的所有角度。要确定角度是否大于45度,我们只需要知道坡度的绝对值是否大于1。对于以下情况,这始终是正确的

Math.Abs(EndLocation.Y-Location.Y)>Math.Abs(EndLocation.X-Location.X)

下面是一个if语句

如果(EndLocation.XMath.Abs(EndLocation.X-Location.X),则角度大于45=真。


我们可以确定角度是否大于45度,而无需执行任何浮点计算。

您的意思是“由点x和点y定义的直线是否与水平线以大于90度的角度相交?”如果是,答案是肯定的(举出几个例子来证明这一点)除非直线是垂直的或水平的。这应该会引导你完善你的问题。我知道数学是正确的,我想知道是否有一个更好的内置函数更有效(如果不需要的话,我讨厌做浮点除法).@Scott Chamerlain看一下我的答案,如果你每次都用水平线作为X轴,这是不需要任何除法的。@Slaks-按照我原来的答案(错)问题Pheelicks是最有效的答案。@Scott Chamberlain-为什么你特别不喜欢做浮点除法?错。这比Atan SLaks更宽容,但它是正确的。假设你使用水平线作为X轴,@Scott Chamberlain说如果他愿意,他宁愿不做浮点除法没有必要。在否决投票之前,我建议你思考——或者画一张图表。我是对的,考虑到这个问题,我觉得很合理。(也许OP需要改写一下)我把我原来的问题弄糟了,我的意思是说45。你对90度的情况是正确的。编辑你的问题,这样我就可以编辑我的投票