当前位置: 首页 > 编程语言 > C#

如何从两个坐标计算角度?分享

时间:2023-04-10 22:43:49 C#

如何从两个坐标计算角度?我正在开发一个基于3D对象的项目,并通过我的程序对它们进行操作。我目前有一个文本框,允许我放置学位的标题和一个按钮,该按钮将计算所需的值,从而导致我的主要对象更改其标题。下面是该函数的代码:privatevoidbtnSetHeading_Click(objectsender,EventArgse){if(this.textBoxHeading.Text.Length==0)return;浮动标题=(浮动)0;尝试{heading=float.Parse(this.textBoxHeading.Text);}catch(FormatExceptionex){MessageBox.Show(ex.Message);返回;}if(heading(float)360){MessageBox.Show("无效的航向参数。可接受范围:0-");返回;}floattempCosine=(float)Math.Cos(((heading*Math.PI)/(float)360.0));floattempSine=-((float)Math.Sin(((heading*Math.PI)/(float)360.0)));尝试{ProgramInterop.CreateInstance.SetHeading(tempCosine,tempSine);}catch(Exceptionex){MessageBox.Show("Caught:"+ex.Message);如果我提供90作为朝向,结果是tempCosine=0.7071068和tempSine=-0.7071068,然后使我的主要对象面向90度或正东。该程序要求标题以两个单独的值(tempCosine和tempSine)给出,我对几何不够熟悉,无法理解为什么我会乘以360而不是180,但这就是它需要工作的方式。现在我项目的下一部分涉及让我的主要对象面对另一个对象,给定它们的(x,y)坐标。例如,如果我的主要对象位于(9112.94,22088.74)而我面对的新对象位于(9127.04,22088.88),那么它将需要几乎正好90度的航向才能使其面对新对象。如何从这两个坐标计算tempCosine和tempSine?大约180,这是真的。我习惯于像这样扩展类来处理弧度和度数。publicstaticclassExtension{publicstaticdoubleToRadians(thisdoubledegree){returndegree*Math.PI/180;}publicstaticdoubleToDegrees(thisdoubleval){returnval*180/Math.PI;关于正弦和余弦(我不确定我是否理解正确的事情)但是如果我使用下面的代码floatx1=9112.94f;浮动y1=22088.74f;浮动x2=9127.04f;浮动y2=22088.88f;floatr=(float)Math.Pow((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1),0.5);浮点余弦=(x2-x1)/r;浮动正弦=(y2-y1)/r;我将得到角度0.5712978(不等于90)。对不起,如果我误解了这个问题。我能够按照Dani的建议使用Atan2(y,x)解决问题。谢谢丹妮。以上就是C#学习教程:两个坐标如何计算角度?如果分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注——floatx1=9112.94f;浮动y1=22088.74f;浮动x2=9127.04f;浮动y2=22088.88f;浮动角度弧度;浮动diffX=x2-x1;浮动diffY=y2-y1;floatatan2Result=(float)Math.Atan2(diffX,diffY);angleRadians=atan2Result/2;如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: