Java 多边形绕椭圆圆周的旋转点

Java 多边形绕椭圆圆周的旋转点,java,geometry,mouseevent,graphics2d,Java,Geometry,Mouseevent,Graphics2d,我有一个2椭圆“和一个多边形三角形的设计mad,如图所示: 当我拖动“手臂””时,该点会随之移动。当我移动手臂时,我遇到的问题是,当三角形的第三个点靠近与P1和P2相同的Y轴时,由于P1和P2不移动,三角形变得更薄 getPivot()存储大椭圆的中心坐标。我试图实现的是基于P3的位置,即从getPivot()开始,P1和P2在x轴上是否或多或少为正,应相应地围绕中心旋转,以保持三角形的比例 所以在理论上,如果我向右移动手臂,p1应该向下旋转,P2应该成比例地向上旋转,但我似乎无法让p1移动

我有一个2椭圆“和一个多边形三角形的设计mad,如图所示:

当我拖动“手臂””时,该点会随之移动。当我移动手臂时,我遇到的问题是,当三角形的第三个点靠近与P1P2相同的Y轴时,由于P1和P2不移动,三角形变得更薄

getPivot()存储大椭圆的中心坐标。我试图实现的是基于P3的位置,即从getPivot()开始,P1和P2在x轴上是否或多或少为正,应相应地围绕中心旋转,以保持三角形的比例

所以在理论上,如果我向右移动手臂,p1应该向下旋转,P2应该成比例地向上旋转,但我似乎无法让p1移动

我试图得到的主要结果是P1和P2围绕getPivot()旋转(点)。 下面是我写的在拖动手臂时尝试旋转P1的内容:

    _angle = _degree * (Math.PI / 180);

    double cosTheta = Math.cos(_angle);
    double sinTheta = Math.sin(_angle);

    int rX1 = (int) ( cosTheta * (_xPoints[0] - getPivot().x) - 
            sinTheta * (_yPoints[0] - getPivot().y) + getPivot().x);
    int rY1 = (int) ( sinTheta * (_xPoints[0] - getPivot().x) + 
            cosTheta * (_yPoints[0] - getPivot().y) + getPivot().y);

    _xPoints[0] = rX1;
    _yPoints[0] = rY1;
    _degree++;

让我们把手臂的中心点设为A,C=getPivot(),R=大圆的半径

向量AC=C-A=(C.X-A.X,C.Y-A.Y)

垂直矢量CP=(-AC.Y,AC.X)

标准化(单位)向量cp=cp/| cp |(将向量除以其长度)

CP1=cp*R,CP2=-cp*R

P1=C+cp*R,P2=C-cp*R