gpt4 book ai didi

android - 如何在轴上旋转正弦曲线

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:14:20 28 4
gpt4 key购买 nike

我正在编写一个 2D 游戏。我实现的是在自定义路径的基础上移动 Sprite 。路径可以用数学表示为:y = sin (x) ..所以运动是波浪。我想以这种方式旋转这个波浪,所以运动不是水平的而是垂直的或者以一些自定义角度尊重原点。我的数学有点弱。对不起。任何人都可以提供帮助。我的代码是这样的

for (int i=0; i<300; i++) {
coordinatesX[i] = i;
coordinatesY[i] = (float) (50 * Math.sin(coordinatesX[i]));
}

createpath (coordinatesX, coordinatesY);
...

最佳答案

好吧,您的对象是用一些起始坐标 (x,y)^t 表示的。为了在 2D 空间中旋转它,您可以使用旋转矩阵

R = [ cos(a) -sin(a)]
[ sin(a) cos(a) ]

由于您还想执行平移 T(沿正弦波移动),您可以通过将 2D 坐标扩展到 3D 齐次坐标来构成仿射变换。假设您的平移将是 (tx,ty) 并且您的旋转角度(以弧度为单位)是 a,则转换矩阵将是

T = [ cos(a) -sin(a) tx
sin(a) cos(a) ty
0 0 1 ]

当您将原始 (x,y) 点转换为 (x,y,1) 一个简单的

 T * (x,y,1)^t

会成功的。

您可以通过将所有元素除以最后一个元素来从齐次坐标返回到笛卡尔坐标(即您失去一个维度)。由于在这种简单的情况下它们始终为 1,因此您可以简单地删除最后一个坐标并返回 2D。

编辑:将 T 和 (x,y,1)^t 相乘得到:

T*(x,y,1)^t = [ cos(a) -sin(a) tx ] [ x ]
[ sin(a) cos(a) ty ]*[ y ] =
[ 0 0 1 ] [ 1 ]

= [ cos(a)*x - sin(a)*y + tx ]
[ sin(a)*x + cos(a)*y + ty ] =
[ 1 ]

= (cos(a)*x - sin(a)*y + tx, sin(a)*x + cos(a)*y + ty, 1)^t

关于android - 如何在轴上旋转正弦曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793188/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com