gpt4 book ai didi

java - 如何使用 Java 围绕一个点旋转多边形?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:31:25 25 4
gpt4 key购买 nike

我正在创建一个 Canvas 对象(线、顶点、三角形...),我想对它们应用围绕一个点的旋转。

我不能使用 Canvas 的 rotate() 方法,因为点附加到 map 上的 GeoPoint,所以如果我使用 rotate() 方法,所有 map 都在旋转 ...

问题在于 Canvas 需要 Point(int,int) 并且由于 cos 和 sin 函数应用旋转会创建 double。因此,当我将旋转应用于所有点时,由于将 double 转换为 int,我遇到了一些图形问题...

所以我正在寻找最佳解决方案。

这是我的旋转代码:

public Point rotatePoint(Point pt, Point center)
{
this.angle = ((this.angle/180)*Math.PI);
double cosAngle = Math.cos(this.angle);
double sinAngle = Math.sin(this.angle);

pt.x = center.x + (int) ((pt.x-center.x)*cosAngle-(pt.y-center.y)*sinAngle);
pt.y = center.y + (int) ((pt.x-center.x)*sinAngle+(pt.y-center.y)*cosAngle);
return pt;
}

最佳答案

代码在计算 pt.y 时有一个小错误。 (pt.x 已更新,但稍后会使用)。而是尝试以下操作:

public Point rotatePoint(Point pt, Point center)
{
this.angle = ((this.angle/180)*Math.PI);
double cosAngle = Math.cos(this.angle);
double sinAngle = Math.sin(this.angle);
double dx = (pt.x-center.x);
double dy = (pt.y-center.y);

pt.x = center.x + (int) (dx*cosAngle-dy*sinAngle);
pt.y = center.y + (int) (dx*sinAngle+dy*cosAngle);
return pt;
}

我还使用了以下变体:

public Point rotatePoint(Point pt, Point center, double angleDeg)
{
double angleRad = (angleDeg/180)*Math.PI);
double cosAngle = Math.cos(angleRad );
double sinAngle = Math.sin(angleRad );
double dx = (pt.x-center.x);
double dy = (pt.y-center.y);

pt.x = center.x + (int) (dx*cosAngle-dy*sinAngle);
pt.y = center.y + (int) (dx*sinAngle+dy*cosAngle);
return pt;
}

关于java - 如何使用 Java 围绕一个点旋转多边形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10533403/

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