C# 是由两个与水平面成45度角的点构成的线
我试图找出由两点定义的直线与水平线相比是否大于或等于90度。这是我使用的代码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 =
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度的情况是正确的。编辑你的问题,这样我就可以编辑我的投票