数学(在 WPF 中):平移后获取新的 x,y 坐标

2024-01-15

参考这个编程游戏 https://stackoverflow.com/questions/505040/developing-a-robocode-type-game-with-net-for-a-school-assignment我目前正在建设。

我正在使用 WPF 为画布制作动画,并且我正在使用BeginAnimation方法将一个画布平移(移动)到另一个画布上。

对于 BeginAnimation,我需要指定From and Tox 和 y 的坐标,这是我使用的方法,如下所示:

//X 
Animator_Body_X.From = Translate_Body.X; //Current x-coordinate
Animator_Body_X.To = //The end X-coordinate
Translate_Body.BeginAnimation(TranslateTransform.XProperty, Animator_Body_X);

//Y
Animator_Body_Y.From = Translate_Body.Y; //Current y-coordinate
Animator_Body_Y.To = //The end Y-coordinate
Translate_Body.BeginAnimation(TranslateTransform.YProperty, Animator_Body_Y);

现在画布需要使用给定的角度进行平移,我可以从方法中获得该角度。

所以我的问题是,给定画布当前旋转的角度 (0-359)、起始 x 和 y 坐标(画布当前所在的位置)和距离(以 px 为单位),如何计算结束坐标?即画布最终将被翻译到的位置。

替代文本http://img244.imageshack.us/img244/4794/canvastranspositionmi5.jpg http://img244.imageshack.us/img244/4794/canvastranspositionmi5.jpg

在上图中,我画了一个我想要实现的目标的例子。

假设画布(实心边框框)的当前方向(角度)为 130 度,并且需要将其平移(沿着该角度的路径;即取决于它当前面向的位置)200 像素...什么将是画布的新坐标(它将停止动画:虚线边框框)?我如何计算它将停止的新坐标?

[更新]解决方案:

感谢双方的帮助Andy https://stackoverflow.com/questions/534424/math-in-wpf-getting-new-x-y-coordinates-after-a-translation/534475#534475 and Cameron https://stackoverflow.com/questions/534424/math-in-wpf-getting-new-x-y-coordinates-after-a-translation/534628#534628,它终于按预期工作了。

这是工作代码:

double headingRadians = Heading * (Math.PI / 180);

Animator_Body_X.From = Translate_Body.X;
Animator_Body_X.To = Math.Sin(headingRadians) * pix + Translate_Body.X;
Translate_Body.BeginAnimation(TranslateTransform.XProperty, Animator_Body_X);

Animator_Body_Y.From = Translate_Body.Y;
Animator_Body_Y.To = ((Math.Cos(headingRadians) * pix) * -1) + Translate_Body.Y;
Translate_Body.BeginAnimation(TranslateTransform.YProperty, Animator_Body_Y);

假设您从 12 点钟开始顺时针旋转,新的 x 坐标将为:

sin(130) * 200 = 153 + original x-coordinate

你的新 y 坐标将是

cos(130) * 200 = -129 + original y-coordinate (assuming negative 'y' is down)

如下所示,请注意,以 C# 为例,sin and cos采用弧度,而不是度数 - 乘以Math.PI/180首先获取以弧度为单位的值。

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

数学(在 WPF 中):平移后获取新的 x,y 坐标 的相关文章

  • 如何从 WPF 应用程序访问 Windows 文件预览图标

    我在一个目录中有一堆图片和视频 需要在WPF应用程序中显示 我正在考虑将Win7大图标本身显示为预览图像 因为这将节省我从视频文件中抓取适当帧的工作 因为 Windows 已经很好地完成了这项工作 有任何代码片段可以访问此 Shell 图标
  • 如何使 WPF 中的窗口对鼠标事件不可见?

    我创建了这个类 它非常适合使我的 WPF 应用程序对鼠标事件透明 using System Runtime InteropServices class Win32 public const int WS EX TRANSPARENT 0x0
  • C/C++:指针算术

    我在读一点 指针算术 发现有两件事我无法理解 也不知道它的用途 address expression address expression and also address expression gt address expression
  • 使用定制距离函数从 Pandas Dataframe 创建距离矩阵

    我有一个包含两列的 Pandas 数据框 id 唯一标识符 和 date 如下所示 test df head id date 0 N1 2020 01 31 1 N2 2020 02 28 2 N3 2020 03 10 我创建了一个自定义
  • MVVM ViewModel 很多属性

    我是 MVVM 新手 正在开发一个应用程序 我有一个包含很多属性的表单视图 大约 50 个 我不能将它们分离到用户控件中 因为这会破坏 mvvm 原则 我无法将它们分成模型 因为它们包含逻辑 属性更改 错误更改这些都不是 poco 类 并且
  • 当 DataTable 为空时,DataGrid 显示空行

    我有一个DataGrid dg1 绑定到DataTable 数据集 表 代码运行良好并且DataGrid正在显示数据DataTable正确 但是 如果我Clear the DataTable the DataGrid也很清楚 但留下一个空行
  • 如何绑定到 DynamicResource 以便可以使用 Converter 或 StringFormat 等? (修订版4)

    注意 这是对早期设计的修订 该设计具有无法在某种样式中使用的限制 从而大大削弱了其有效性 然而 这个新版本现在可以使用样式 本质上是让您可以在任何可以使用绑定或动态资源的地方使用它并获得预期的结果 从而使其更加有用 从技术上讲 这不是一个问
  • WPF XAML 定义的 MenuItem 重用开始工作,然后消失

    以下简单代码尝试在两个单独的菜单上重用 Window Resources 中定义的 MenuItem
  • 如何在 WPF 中设置窗口边框和标题栏的样式? [复制]

    这个问题在这里已经有答案了 我们正在开发一个 WPF 应用程序 它使用 Telerik 的控件套件 一切正常且看起来很好 不幸的是 我们最近需要替换所有对话框的基类 将 RadWindow 更改为标准 WPF 窗口 原因与本讨论无关 通过这
  • python中的张量点运算

    我有两个数组A 1 2 3 and B 1 0 1 0 问题是如何在 python 中执行张量点积 我期待得到 C 1 2 3 0 0 0 1 2 3 0 0 0 函数 np tensordot 返回有关数组形状的错误 对这个问题稍微补充一
  • 获取颜色位置的深度,Kinect SDK

    我正在寻找方法 尽快 从 Kinect 相机获取颜色像素的相应深度 我找到了 MapDepthFrameToColorFrame 函数 但这只给我特定深度位置的颜色 我想要相反的颜色 我想要这个的原因是我将能够单击 RGB 图像上的某个位置
  • MVVM 创建 ViewModel

    有人可以向我解释一下如何为 MVVM 模式创建 ViewModel 我试图理解这里的教程 http msdn microsoft com en us magazine dd419663 aspx http msdn microsoft co
  • 将快速文本输入发送到另一个进程(窗口)

    我正在编写一个 C WPF 程序 它将文本消息发送到另一个程序的窗口 我有一个宏程序作为我的键盘驱动程序 Logitech g15 的一部分 它已经做到了这一点 尽管它不会将击键直接发送到进程 而是发送到当前聚焦的窗口 它运行良好 但我也需
  • JavaScript 阶乘防止无穷大

    我一直在 JavaScript 中使用这个函数来计算阶乘数 var f function factorial n if n 0 n 1 return 1 if f n gt 0 return f n return f n factorial
  • 使用隧道而不是冒泡的路由命令

    我有一个自定义控件 MyControl 公开自定义命令 我想要家长Window能够调用此命令 以及所有MyControls应该对此做出反应 我已将命令添加到MyControl s CommandBindings集合 它还提供了CanExec
  • 如何在 WPF 中设置覆盖全局样式的特定控制元素设置?

    我通过应用程序范围的资源字典为应用程序中的按钮定义了全局样式 样式如下所示 来自另一个 SO 示例
  • C# - WPF - 组合框 - 将鼠标悬停在聚焦的组合框上时防止滚动(使用附加属性)

    背景 我需要防止ComboBox从将鼠标悬停在其上 聚焦时 时滚动和使用鼠标滚轮滚动 在这种情况下 我无法使用隐藏代码 因此我使用附加属性 我刚问这个问题 https stackoverflow com questions 76101509
  • ResourceDictionary WPF 中样式的交互触发器

    我有一个ComboBox我需要在应用程序的多个地方使用它 所以我设置了它的大部分属性ComboBox in ResourceDictionary并在我需要的地方将其用作样式 风格为ComboBox is
  • 内容更新时自动调整列表视图列的大小

    我试图让列表视图中的 gridviewcolumns 在更新绑定源 视图模型上的可观察集合 时自动调整内容大小 列表视图填充正常 但当我刷新 更新集合时不起作用 这是我到目前为止正在尝试的解决方案 XAML
  • 具有最小刻度的图表的漂亮标签算法

    我需要手动计算图表的刻度标签和刻度范围 我知道漂亮刻度的 标准 算法 参见 我也知道这个Java实现 http erison blogspot nl 2011 07 algorithm for optimal scaling on char

随机推荐