如何根据两个坐标计算角度?

2024-02-29

我正在开发一个基于 3D 对象的项目,并通过我的程序操作它们。我目前有一个文本框,允许我输入以度为单位的标题和一个按钮,该按钮将计算使我的主要对象更改其标题所需的值。这是该函数的代码:

    private void btnSetHeading_Click(object sender, EventArgs e)
    {
        if (this.textBoxHeading.Text.Length == 0)
            return;

        float heading = (float)0;
        try
        {
            heading = float.Parse(this.textBoxHeading.Text);
        }
        catch (FormatException ex)
        {
            MessageBox.Show(ex.Message);
            return;
        }

        if (heading < (float)0 || heading > (float)360)
        {
            MessageBox.Show("Invalid heading parameter. Acceptable range: 0 - 360");
            return;
        }

        float tempCosine = (float)Math.Cos(((heading * Math.PI) / (float)360.0));
        float tempSine = -((float)Math.Sin(((heading * Math.PI) / (float)360.0)));
        try
        {
            ProgramInterop.CreateInstance.SetHeading(tempCosine, tempSine);
        }
        catch (Exception ex)
        {
            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来说,确实如此。我习惯了像这样的扩展类来处理弧度和度数。

public static class Extension
{

    public static double ToRadians(this double degree)
    {
        return degree * Math.PI / 180;
    }

    public static double ToDegrees(this double val)
    {
        return val * 180 / Math.PI;
    }
}

关于正弦和余弦(我不确定我是否理解正确),但如果我使用下面的代码

float x1 = 9112.94f;
float y1 = 22088.74f;

float x2 = 9127.04f;
float y2 = 22088.88f;

float r = (float) Math.Pow((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1), 0.5);
float cosine = (x2 - x1) /r;
float sine = (y2 - y1) /r;

我将得到角度 0.5712978(不等于 90)。

抱歉,如果我误解了这个问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据两个坐标计算角度? 的相关文章

随机推荐

  • 如何清理git存储库中损坏的对象?

    如何获得干净的 git 存储库 这可能会丢失一些历史 但不是全部 此存储库可能已因并发修改和无效合并而损坏同步事物 https syncthing net tool 机器中同步文件的工具 在每一个git commit Could not r
  • Gtkmm - “Gtk::ScrolledWindow”中的“Gtk::DrawingArea”?

    我正在使用 gtkmm 制作一个 GUI 程序 我想在 Gtk DrawingArea 小部件上绘制一些图形 但我希望该小部件 可调整大小 所以当我绘制时 假设有一条从 0 0 到 50 50 的线 像素 绘图区域的大小应调整为大小为 50
  • EJB 应该是实例变量并在 JSF Managed Beans 中标记为瞬态吗?

    我们有几个具有请求 视图和会话范围的 JSF 托管 bean 并且正在运行 WebLogic 11g 10 3 2 Weblogic 不支持 JSF Managed Bean 中的 EJB 注释 因此我们使用了这些过程http techno
  • LSB 注释不完整。 insserv:缺少“提供:”的有效名称,请添加

    最近我安装了 Debian x86 64 oracle 11g 和 OCI8 我想自动执行下面的 shell 脚本 但收到以下消息错误 root debian etc init d uname a Linux debian 3 2 0 4
  • 将 CSS 应用到 jQuery 对话框按钮

    所以我目前有一个带有两个按钮的 jQuery 对话框 保存和关闭 我使用下面的代码创建对话框 dialogDiv dialog autoOpen false modal true width 600 resizable false butt
  • 在 Iframe 中旋转 URL

    我有 10 个不同的 url 我想将它们输入到 iframe src 属性中 我还想在 iframe 内的所有 10 个 url 之间每 5 秒旋转一次 不确定如何使用 javascript 最佳方法来做到这一点 抱歉 应该提到我正在使用
  • kotlin.TypeCastException:null 无法转换为非 null 类型 kotlin.collections.MutableList

    请不要标记为重复 因为问题略有不同 gt null 不能转换为非 null 类型 kotlin collections 可变列表 应用场景 我一直在使用改造执行删除购物车 如果至少存在一项 它将显示在 recyclerview 中 2 如果
  • 来自 .NET 应用程序或 VSTO 加载项的电子表格比较 (Office 2013) 自动化

    是否有可能实现新的自动化电子表格比较 http office microsoft com en us support basic tasks in spreadsheet compare HA102834117 aspx通过嵌入一些 Mic
  • Javascript:单击时加载 AddThis

    我对此感到困惑很长一段时间 但无法让它发挥作用 情况是这样的 我希望社交媒体栏仅在人们单击某个 DIV 时出现 除非人们单击 div 否则不应加载它 对于社交媒体 我有 添加此 和 GOOGLE 1 图标 但我无法通过这样的外部调用来加载它
  • Solr 未初始化

    我只是创建一个应用程序 它使用 ASP NET Web 应用程序从代码端启动 Solr http localhost 8080 solr admin http localhost 8080 solr admin 这个链接工作完美 但我从代码
  • Excel 在代码隐藏中将数据添加到 WorksheetPart

    大家好 我正在使用以下代码创建一个包含 3 个工作表的 Excel 文件 using SpreadsheetDocument spreadSheet SpreadsheetDocument Create path UrlReport xls
  • string.unpack 在 Ruby 中如何工作?

    有人可以解释为什么以下解包的结果是如何计算的吗 aaa unpack h2H2 gt 16 61 在二进制中 a 0110 0001 我不确定 h2 如何变成16 0001 0000 或 H2 如何变成61 0011 1101 不是 16
  • Angularjs 使用指令进行初始表单验证

    我有一个名为的验证指令valid number用于使用 setValidity 设置表单的有效性 这对于我在输入框中键入的任何文本值都适用 该输入框中已将指令作为属性应用 HTML 是
  • 默认日期年份设置为 1970 年

    我需要解析一个最初没有设置年份的字符串 例如 8 月 13 日 11 30 但是当我输出日期时它会添加年份 我尝试设置年份 但年份完全错误 输出为 Thu Aug 13 11 30 00 GMT 3911 有没有办法在解析日期后设置年份 S
  • AngularJS forEach 和 splice

    我有一个像这样的数组 scope emails key Work value email protected cdn cgi l email protection key value key Work value email protect
  • 无法在 macOS Mojave 中安装 Xcode 10 网络链接调节器

    我在 macOS Mojave beta 11 上使用 Xcode 10 最终版本 我下载了 Xcode 10 的附加工具包来自苹果网站 https developer apple com download more for 20Xcode
  • 当我拉取 Git 子模块存储库及其封闭存储库时,为什么我还要提交本地更改?

    假设我有一个 Git 存储库 R 它有一个子目录 该子目录是子模块存储库 SR 在机器 A 上 我对 SR 进行了更改 我承诺 推动他们 如果我向上移动到父目录 git status 将显示有本地更改 据我所知 这是因为 gitlink 已
  • 如何在 Yii 2 中检索会话值

    当我将产品添加到购物车会话并获取会话购物车值时 我遇到了 Yii 2 会话的问题 session start print r SESSION exit 我得到了这条线 Array flash gt Array id gt 65 另外在尝试
  • RESTful 幂等性

    我正在利用 ROA 面向资源的架构 设计一个 RESTful Web 服务 我正在尝试找出一种有效的方法来保证 PUT 请求的幂等性 在服务器指定资源键的情况下创建新资源 根据我的理解 传统的方法是创建一种事务资源 例如 CREATE PE
  • 如何根据两个坐标计算角度?

    我正在开发一个基于 3D 对象的项目 并通过我的程序操作它们 我目前有一个文本框 允许我输入以度为单位的标题和一个按钮 该按钮将计算使我的主要对象更改其标题所需的值 这是该函数的代码 private void btnSetHeading C