ページ 11

processing 軸回転の回転のしかた

Posted: 2016年3月03日(木) 13:49
by みによん
processingの勉強中です。

Eという図形に対して

size(600, 600, P3D);
float[] x = {170, 290, 170, 170, 170, 270, 170, 290};
float[] y = {60, 60, 60, 260, 160, 160, 260, 260};
float[] z = {-100, -100, -100, -100, -100, -100, -100, -100};
int i, n = x.length, d = 0;

float[] xd = new float[n];
float[] yd = new float[n];
float[] zd = new float[n];

float tx = 170, ty = 0, tz = -100;
float r = radians(50);

for(i = 0; i < n; i++){
xd = x - tx;
yd = y - ty;
zd = z - tz;
}
for(i = 0; i < n; i++){
float tmp = cos(r) * xd + sin(r) * zd;
yd = yd;
zd[i] = -sin(r) * xd[i] + cos(r) * zd[i];
xd[i] = tmp;
}
for(i = 0; i < n; i++){
xd[i] = xd[i] + tx;
yd[i] = yd[i] + ty;
zd[i] = zd[i] + tz;
}

for(i = 0; i < n / 2; i++){
line(xd[i * 2], yd[i * 2], zd[i * 2], xd[i * 2 + 1], yd[i * 2 + 1], zd[i * 2 + 1]);
}

だと、Eの縦線(Y軸)を軸に回転するソースなんですけど
これをX軸中心にするためにはどのように変化させればいいのでしょうか?
詳細にいうと、Eの文字の一番上の横線を軸にしたいです。

}
for(i = 0; i < n; i++){
float tmp = cos(r) * xd[i] + sin(r) * zd[i];
yd[i] = yd[i];
zd[i] = -sin(r) * xd[i] + cos(r) * zd[i];
xd[i] = tmp;
}
この辺をいじるのかな?と思いいろいろ試してます・・