当前位置: 首页 > 知识库问答 >
问题:

一个点绕另一个点旋转Java

罗学真
2023-03-14

下面是java中的一个代码段,用于将坐标为a(10,10),B(20,10),C(20,20),D(10,20)的顶点围绕正方形的中心点旋转一个角度。正方形的边是10分。旋转角度为90度。理想情况下,旋转后A必须变成B,B必须变成C,C必须变成D,D必须变成A。

private Point getRotation(Point start, int side, int rotation){

    int x = start.getX();
    int y = start.getY();

    int pivot_x = x + (side/2);
    int pivot_y = y + (side/2);

    float angle = (float)Math.toRadians(rotation);

    int xR = (int)(pivot_x + (x -pivot_x)*Math.cos(angle) - (y - pivot_y)*Math.sin(angle));
    int yR = (int)(pivot_y + (x -pivot_x)*Math.sin(angle) + (y - pivot_y)*Math.cos(angle));

    return new Point(xR,yR);        
}

public static void main(String[] args) {
    Square s = new Square();
    Point rotatedPoint1= s.getRotation(new Point(10,10), 10, 90);
    System.out.println("{"+rotatedPoint1.getX()+","+rotatedPoint1.getY()+"}");

    Point rotatedPoint2= s.getRotation(new Point(20,10), 10, 90);
    System.out.println("{"+rotatedPoint2.getX()+","+rotatedPoint2.getY()+"}");

    Point rotatedPoint3= s.getRotation(new Point(20,20), 10, 90);
    System.out.println("{"+rotatedPoint3.getX()+","+rotatedPoint3.getY()+"}");

    Point rotatedPoint4= s.getRotation(new Point(10,20), 10, 90);
    System.out.println("{"+rotatedPoint4.getX()+","+rotatedPoint4.getY()+"}");
}

所取得的结果是不正确的

>

  • 点A(10,10)旋转到(20,10)---正确

    点B(20,10)旋转到(30,10)----不正确

      null

    问题出在哪里?

  • 共有1个答案

    桑坚成
    2023-03-14

    问题是你计算正方形的质心。

    四个顶点都应该是同一个点。但是,在调用函数时,根据每个新对计算为(x+5,y+5)。即:

    • 调用(10,10),枢轴为(15,15)
    • 调用(20,10),枢轴为(25,15)
    • 调用(20,20),pivot是(25,25)
    • 调用(10,20),枢轴为(15,25)

    你应该把它们都绕着同一个枢轴(15,15)旋转。

    因此,您应该在调用getRotation()方法之前计算pivot,并将预先计算的pivot作为参数传递,而不是传递边的长度。

     类似资料:
    • 本文向大家介绍C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法,包括了C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现计算一个点围绕另一个点旋转指定弧度后坐标值的方法。分享给大家供大家参考。具体如下: 1.示例图 P(x1,y1)以点A(a,b)为圆心,旋转弧度为θ,求旋转后点Q(x2,y2)的坐标 2.实现方法 先将

    • 问题内容: 我已经在这个问题上进行了很多搜索,但是我找不到真正合适的答案。 我需要围绕给定点(例如0,0,0)旋转圆柱体,但是默认情况下会给出圆柱体的枢轴。我该如何改变? 为了更好地说明我想做什么,我将显示3张图像。 imageshack.us/photo/my-images/259/aintgood.jpg imageshack.us/photo/my-images/840/whatineed.

    • 我有两个矩形:红色和绿色。对于它们中的每一个,我有以下信息: 中心点( 和 坐标)。 旋转角度 宽度和高度 矩形将始终以正坐标移动。编辑:没有坐标可以是负的:矩形总是位于正坐标。因此,中心永远不会是(0,0)。 问题 我有一个起始位置。为了简化示例,假设我的红色和绿色矩形的位置如下: 现在,我使用0º和90º之间的角度φ旋转红色矩形。但是,绿色矩形需要旋转并保持其相对于红色矩形的位置。绿色矩形不仅

    • 所以我想在10x10坐标系中转换不同支点之间的三个点 想象我想要什么: 这是我的第一个坐标系 翻译成: 现在,这些点必须保持在不同系统之间的同一点上,因此只有这些点的坐标应该更改。首先,我想我应该把之前的原点添加到转换后的坐标中,这对A和B是有效的,但C是不同的,也许我使用了一个错误的公式或其他东西 请你帮帮我

    • 问题内容: 我试图在这个问题中创建一个类似于“奖杯轮”的可旋转节点。到目前为止,我具有甩尾功能,可以使用效果很好的UIPanGestureRecognizer在物理物体上添加角度脉冲。我也可以通过触摸停止旋转。 现在,我试图通过拖动或滑动手势来微调方向盘,这样,如果玩家对最终的效果不满意,就可以手动旋转/拖动/旋转它所喜欢的旋转方式。 目前,我将触摸的位置保存在touchesBegan中,并尝试在

    • 我想在x、y和z方向旋转我的模型Matix,但它以一种意想不到的方式旋转。我用Qt。 第一次旋转后,后续旋转围绕新模型矩阵的基础旋转,而我希望后续旋转围绕原点旋转。