在处理中,我有一个 3D 坐标系,其中 x、y 和 z 维度从 0 到 1000。我在这些坐标内随机放置一个点,并希望它绕中心旋转(x、y 和 z = 500) )按给定角度。我想重新计算点坐标,而不是依赖rotateX()/rotateY()/rotateZ()方法。
x、y 和 z 坐标的数学公式是什么?如何用代码表达公式? (我所做的搜索并没有给出针对我的案例的答案)。
您必须对点应用旋转矩阵:
float xr = x * cos(angle) - y * sin(angle);
float yr = x * sin(angle) + y * cos(angle);
最小示例:
void setup(){
size(400, 400);
}
float x = 100;
float y = 0;
void draw(){
float angle = (frameCount % 360) * PI / 180.0;
float xr = x * cos(angle) - y * sin(angle);
float yr = x * sin(angle) + y * cos(angle);
background(255);
translate(width / 2, height / 2);
stroke(0);
fill(2550, 0, 0);
circle(0, 0, 10);
circle(xr, yr, 10);
line( 0, 0, xr, yr);
}