gpt4 book ai didi

java - 缩放和旋转点数组

转载 作者:行者123 更新时间:2023-11-30 06:53:04 25 4
gpt4 key购买 nike

过去几天我一直在为这个问题绞尽脑汁,但我就是想不出一个可行的(更不用说高效的)解决方案了。

我在数组中有一组点,代表鼠标路径:

Points[0] = 20,50
Points[Points.length-1] = 500,230

我试图找到一种方法来旋转点数组(路径),以便第一个点从 x1,y1 开始,最后一个点以 x2,y2 结束。

我知道这将涉及缩放和旋转整个数组,但由于缺乏数学知识,我不知道如何解决这个问题。

有什么想法吗?谢谢!

最佳答案

正如 James Large 在评论中所说,您可以使用变换矩阵有效地做到这一点。您的变换将需要缩放、旋转和平移,其中每一个都可以用矩阵表示,并且您可以构建一个变换矩阵,只需将表示每个变换的矩阵相乘即可​​通过更简单的变换一次性完成所有这些操作使用矩阵乘法。

您可以通过首先平移点以使第一个点位于原点(因为这是您要围绕其旋转的点),然后应用旋转、缩放变换,然后进行第二次平移来实现您想要的效果第一个点位于 x1, y1。

通过计算(x1,y1) - (x2,y2)之间的角度与原始起点和终点之间的角度之间的差值可以计算出旋转角度:

double rotationAngle = atan2(y2-y1, x2-x1) -
atan2(Points[Points.length-1].y-Points[0].y, Points[Points.length-1].x-Points[0].x);

缩放因子是 (x1, y1) - (x2, y2) 之间的距离除以未变换的起点和终点之间的距离。

因此您的转换可以这样构建:

  • 翻译为 (-Points[0].x, -Points[0].y)
  • 按旋转角度旋转
  • 按比例因子缩放
  • 翻译为 (x1, y1)

旋转和缩放的顺序可以互换,这并不重要。参见transformation matrices的文章了解如何构建每一个。

你也可以使用联立方程求解,但我认为这种方式更直观。您最终会得到相同的矩阵,因此每点变换同样高效。

关于java - 缩放和旋转点数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42374778/

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