围绕中心向量2点旋转对象
我应该在这个前言,我不是一个数学家附近。 我在另一个问题中找到的代码似乎有点工作……除了它导致我放置的对象大部分在屏幕外旋转。
这是代码:
public void Update(GameTime gameTime) { Location = RotateAboutOrigin(Center, Origin, 0.01f); } public Vector2 RotateAboutOrigin(Vector2 point, Vector2 origin, float rotation) { var u = point - origin; //point relative to origin if (u == Vector2.Zero) return point; var a = (float)Math.Atan2(uY, uX); //angle relative to origin a += rotation; //rotate //u is now the new point relative to origin u = u.Length() * new Vector2((float)Math.Cos(a), (float)Math.Sin(a)); return u + origin; }
通过鼠标单击中心向量周围的任意位置来设置位置。
当我点击时,Center是(你猜对了)我放置的对象的中心。 它是通过简单地划分纹理的高度和宽度来确定的。
Origin是我试图旋转的vector2。 它静态设置为384,384。
我可以告诉它,它正在获得两个向量之间的距离,然后使用atan2来确定角度。 其余的后来对我来说是一个谜。 我知道我应该知道一切都做了什么,而且我打算在春季开始上大学(仅晚十年)。 我试过读它们,但我迷路了。 任何帮助,将不胜感激。
此外,如果你有一个很好的触发傻瓜网站,你可以推荐,我很乐意通读它。
这是一个替代方案:
public Vector2 RotateAboutOrigin(Vector2 point, Vector2 origin, float rotation) { return Vector2.Transform(point - origin, Matrix.CreateRotationZ(rotation)) + origin; }
它确实“转化为世界起源,旋转,然后翻译”位。
无论原点相对于世界原点的位置如何,这都会使“原点”围绕“旋转”弧度旋转“点”。 触发发生在内置函数的’CreateRotationZ()’中。 要了解它如何应用trig,请在框架中反映该方法。
编辑:修复变量名称
使用matricies更容易完成,虽然基础理论可能有点难以理解,但你并不需要知道所有这一切(站在巨人的肩膀上等等)。
要围绕原点旋转矢量:
Vector2.Transform(PosComponent.Direction, Matrix.CreateRotationZ(-0.1f))
其中PosComponent.Direction
是我的向量, -0.1f
是它想要旋转的量(以弧度表示,而不是度数)。
由于您希望围绕原点之外的其他内容旋转矢量,因此您需要先移动矢量,然后旋转,然后将其移回。 这基本上就是你上面的代码所做的,除了获得角度并使用trig进行旋转。
做轮换:
- 你获得了相对于原点的点(如代码中所示),
- 然后旋转
- 最后将向量移回(如代码中所示)。
这个问题和我的答案,在理解trig时可能有一些用处: 给定一个角度,获得圆周上圆点的位置?
上述就是C#学习教程:围绕中心向量2点旋转对象分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/949614.html