java - 围绕其中一个点旋转对象
问题描述
我有一个问题,我必须创建一个随机对象(图)并且我必须旋转它。在课堂上,我们创建了一个代码,我们使用此代码旋转整个对象
int count = Integer.parseInt(jComboBox1.getSelectedItem().toString());
double alfa = Math.toRadians(Float.parseFloat(jTextField1.getText()));
for (int i=0;i<count;i++){
int x=(int)Math.round(P.x[i]*Math.cos(alfa)-P.y[i]*Math.sin(alfa));
int y=(int)Math.round(P.x[i]*Math.sin(alfa)+P.y[i]*Math.cos(alfa));
P.x[i]=x;
P.y[i]=y;
}
但是我必须修改这段代码,使其围绕该对象的特定点旋转,如果之前该点位于对象之外的某个位置,那么这一次,它必须是对象的一个点。对象的图片我必须围绕蓝点旋转所有红点。我的表单中有一个单选按钮,我可以在其中选择对象的特定点,然后通过鼠标单击我可以更改该点的坐标,但我不知道如何在不使用鼠标的情况下获取 X 和 Y 坐标使用这个公式:
x1=x-中心X;
y1=y-中心Y;
x2=x1*Math.cos(alpha)+y1*Math.sin(alpha);
y2=x1*Math.sin(alpha)-y1.Math.cos(alpha);
x3=x2+中心X;
y3=y2+中心Y;
解决方案
这是围绕原点旋转,即坐标为x = 0,y = 0的点。
int x=(int)Math.round(P.x[i]*Math.cos(alfa)-P.y[i]*Math.sin(alfa));
您现在需要围绕其他点旋转它,我们称它为 XX、YY
int x=(int)Math.round((P.x[i]-XX)*Math.cos(alfa)-(P.y[i]-YY)*Math.sin(alfa));
当你有 x 和 y 时,你需要添加原始点:
P.x[i]=XX+x;
我在这里只做了“x”方面的事情,把“y”留给读者作为练习。它应该很简单。
推荐阅读
- python - Pygame不会在鼠标位置渲染矩形?
- discord.js - Discord.js 反应收集器什么也不做
- assembly - 过早重置堆栈指针?令人困惑的汇编代码
- reactjs - Uncaught (in promise) IntegrationError: Missing value for Stripe(): apiKey 应该是一个字符串。仅在部署到 vercel 但在本地工作正常时
- java - 在 jsp 和 struts 中创建下拉菜单时出错
- deployment - SqlPackage 不部署引用的 DAC 包
- wordpress - 无法以我的自定义格式比较 ACF 字段日期
- javascript - 即使在 React with Firebase Realtime DB 中返回了一个值,为什么我会得到“未定义”?
- php - 将十进制值从 JQuery Ajax 发送到 PHP 会导致不需要的舍入
- python - Ubuntu python 3.7 到 3.8 更新替代方案