軸の周りの回転です。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.Scrollbar;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import myMath.MyPoint3D;
import myMath.Tpl10;
public class TestMySpace03 extends Tpl10 implements AdjustmentListener {
Label myLabelX, myLabelY, myLabelZ;
Scrollbar myScrollbarX, myScrollbarY, myScrollbarZ; // スクロールバー
int angleX = 0, angleY = 0, angleZ = 0;
int angleX0 = 0, angleY0 = 0, angleZ0 = 0;
public void init() {
tr.move(getWidth() / 2, getHeight() / 2);
tr.set(1, 0, 0, -1);
tr.scale(50);
// パネル作成
Panel myPanel2 = new Panel();
myPanel2.setLayout(new GridLayout(2, 3));
myLabelX = new Label("X = " + angleX);
myLabelY = new Label("Y = " + angleY);
myLabelZ = new Label("Z = " + angleZ);
myScrollbarX = new Scrollbar(Scrollbar.HORIZONTAL, angleX, 0, -180, 180);
myScrollbarY = new Scrollbar(Scrollbar.HORIZONTAL, angleY, 0, -180, 180);
myScrollbarZ = new Scrollbar(Scrollbar.HORIZONTAL, angleZ, 0, -180, 180);
myPanel2.add(myLabelX);
myPanel2.add(myLabelY);
myPanel2.add(myLabelZ);
myPanel2.add(myScrollbarX);
myPanel2.add(myScrollbarY);
myPanel2.add(myScrollbarZ);
// 全体のレイアウト
setLayout(new BorderLayout());
add("South", myPanel2);
// イベントリスナーへの登録
myScrollbarX.addAdjustmentListener(this);
myScrollbarY.addAdjustmentListener(this);
myScrollbarZ.addAdjustmentListener(this);
}
// スクロールバーに変位があったときのイベント処理
public void adjustmentValueChanged(AdjustmentEvent e) {
angleX0 = angleX;
angleY0 = angleY;
angleZ0 = angleZ;
angleX = myScrollbarX.getValue();
angleY = myScrollbarY.getValue();
angleZ = myScrollbarZ.getValue();
myLabelX.setText("x = " + angleX);
myLabelY.setText("y = " + angleY);
myLabelZ.setText("z = " + angleZ);
repaint();
}
public void draw(Graphics2D g2) {
tr.rotate3D(angleX - angleX0, angleY - angleY0, angleZ - angleZ0);
MyPoint3D p0 = new MyPoint3D();
MyPoint3D p1 = new MyPoint3D();
MyPoint3D p2 = new MyPoint3D();
MyPoint3D p3 = new MyPoint3D();
MyPoint3D p4 = new MyPoint3D();
p0.set(0, 0, 0);
// 軸
g2.setColor(Color.red);
g2.draw(tr.Line(0, 0, 0, 3, 0, 0));
g2.setColor(Color.green);
g2.draw(tr.Line(0, 0, 0, 0, 3, 0));
g2.setColor(Color.blue);
g2.draw(tr.Line(0, 0, 0, 0, 0, 3));
// 図形1
g2.setColor(Color.cyan);
p1.set(1, 0, 0);
p2.set(0, 1, 0);
p3.set(1, 1, 0);
g2.draw(tr.Line(p0.x, p0.y, p0.z, p2.x, p2.y, p2.z));
g2.draw(tr.Line(p1.x, p1.y, p1.z, p3.x, p3.y, p3.z));
g2.draw(tr.Line(p2.x, p2.y, p2.z, p3.x, p3.y, p3.z));
// 図形2
g2.setColor(Color.blue);
p1.set(1, 0, 1);
p2.set(1, 1, 1);
p3.set(0, 1, 1);
p4.set(0, 0, 1);
g2.draw(tr.Line(p1.x, p1.y, p1.z, p4.x, p4.y, p4.z));
g2.draw(tr.Line(p1.x, p1.y, p1.z, p2.x, p2.y, p2.z));
g2.draw(tr.Line(p2.x, p2.y, p2.z, p3.x, p3.y, p3.z));
g2.draw(tr.Line(p3.x, p3.y, p3.z, p4.x, p4.y, p4.z));
}
}
x軸、y軸、z軸の周りに回転します。