处理:如何编写围绕坐标系中心旋转点的公式?

问题描述 投票:0回答:1

在处理中,我有一个 3D 坐标系,其中 x、y 和 z 维度从 0 到 1000。我在这些坐标内随机放置一个点,并希望它绕中心旋转(x、y 和 z = 500) )按给定角度。我想重新计算点坐标,而不是依赖rotateX()/rotateY()/rotateZ()方法。

x、y 和 z 坐标的数学公式是什么?如何用代码表达公式? (我所做的搜索并没有给出针对我的案例的答案)。

processing trigonometry
1个回答
0
投票

您必须对点应用旋转矩阵

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.