軸の周りの回転です。
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軸の周りに回転します。