java - 将图形对象旋转 360 度

标签 java android math geometry

<分区>

我有两个点 (x1,x2,y1,y2) 它们形成一条垂直线。当用户旋转物体时我知道这两点,问题是:如何找到形成水平线的其他两点的坐标。如何更容易实现?我将不胜感激任何帮助! example object

最佳答案

Rotation matrix是:

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

所以对于 x,y 旋转是:

rx = x*cos(a) + y*sin(a);
ry = -x*sin(a) + y*cos(a);

因为另一条线是 90 度角,所以计算结果为:

rx = y;
ry = -x;

所以:

(x1,x2,y1,y2) => (y1,y2,-x1,-x2)

我会使用 Point类来存储它并将其放入方法中:

public static Point Rotate90(Point point){
     return new Point(point.y, -point.x);
}

现在这是一个关于原点的旋转,如果你的线需要接触另一条线,那么你需要在前后平移。

p = x,y
pr = centre of rotation

围绕pr旋转p:

Rotate90(p - pr) + pr

在一个方法中:

public static Point Rotate90(Point point, Point about){
     Point translated = new Point(point.x - about.x, point.y - about.y);
     Point rotated = Rotate90(translated);
     return new Point(rotated.x + about.x, rotated.y + about.y);
}

关于java - 将图形对象旋转 360 度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35546914/

相关文章:

java - 自定义 Android 实用程序类

java - 如何确保线程完成其任务,然后只有新线程可以在java中启动?

android - 如何从 android 生成 JWT token

perl - 拆分和添加数字

c# - 使用 Math.Round 的舍入问题

java - SQL Java - 使用游标返回 10 行的简单查询

java - JMF:为网络摄像头设置 FPS

android - 在 Android 中命名 XML 元素的 id 的最佳做法是什么?

android - 我的应用程序中显示的空 map

c - 如何使用递归或任何其他方法实现 L.C.M (1 to N),N>2?