gpt4 book ai didi

java - 如何近似 vector 旋转

转载 作者:行者123 更新时间:2023-12-02 07:28:51 26 4
gpt4 key购买 nike

我有一个点以速度 V( vector X, vector Y)移动。最初 V = (1, 0)。我使用以下方法反复将其旋转随机角度:

vector X = vector X * Math.cos(弧度角度) - vector Y * Math.sin(弧度角度);
vector Y = vector X * Math.sin(弧度角度) + vector Y * Math.cos(弧度角度);

旋转不应调整 vector 长度。但这个解决方案随着时间的推移减少了我的 vector 长度:

0.9999999164020167
0.9989817245134542
0.9990928546670482
0.9990920078686215
0.9990307271300217
0.9990123195664165
0.9990122314933966
0.9958140526821458
0.9953881407397223
0.9953002497794944
0.9953739080312035
0.9953762669739241
0.9951229086200286
0.9951022010798389
0.9950609497602859
0.9950608230271147
0.9948941861659032
0.9949385678072231

我知道 sin 和 cos 函数给出了近似结果。但为什么我的长度会减少呢?又该如何解决呢?

最佳答案

欢迎来到非精确浮点运算的世界。你会失去精确度。这是生活的一个事实。

您可能应该以递增的角度旋转初始固定 vector 。

即:

angle = angle + radianAngle;
vectorX = initialVectorX * Math.cos(angle) - initialVectorY * Math.sin(angle);
vectorY = initialVectorX * Math.sin(angle) + initialVectorY * Math.cos(angle);

这样你就不会累积精度损失。

关于java - 如何近似 vector 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13181480/

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