• 締切済み

javaの図形なのですが

javaの図形なのですが、結果が球の形にそってぐるぐるっと リンゴの皮むきのような感じの線になるはずなのですが動かない、 というよりもどこを修正すればいいのか見当もつかずさまよっています。正直、助けていただきたいです。 たぶん抜けてるところがあるはずなんですが、何が抜けてて何を入れれば良いかわからないので教えてほしいです。 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class ui {public static void main(String[] args) { JFrame jf = new JFrame("ui"); MyCanvas mc = new MyCanvas(); mc.setPreferredSize(new Dimension(700,700)); jf.getContentPane().add(mc); jf.pack(); jf.setVisible(true); } } class MyCanvas extends JPanel { static double [][] p = { {ここに数値を入れるのですが多いので投稿できないので省きます} }; double _xa = 30; double _ya = 40; int doX, doY; public void paintComponent( Graphics g ) { super.paintComponent(g); setBackground(Color.black); g.setColor(Color.white); disp_3Dobj(_xa, _ya, getWidth()/2, getHeight()/2, g);( } void disp_3Dobj(double xa, double ya, int px, int py, Graphics g) { int [] p2d; int n = p[0].length; for (int i = 0; i < n; i++) { } } int [] get2Dpos(double x, double y, double z, double xa, double ya, int px, int py) { final double D2Rad = Math.PI/180.0; double a = xa*D2Rad, b = ya*D2Rad; double x1, y1, zt; double sinA = Math.sin(a), sinB = Math.sin(b); double cosA = Math.cos(a), cosB = Math.cos(b); int [] pos = new int[2]; x1 = x*cosB + z*sinB; zt = -x*sinB + z*cosB; y1 = y*cosA - zt*sinA; pos[0] = px+(int)Math.rint(x1); pos[1] = py-(int)Math.rint(y1); return pos;}}

みんなの回答

回答No.1

たぶん、回転行列のところが違うんじゃないのかなぁ? 今回のプログラムのはX軸方向とY軸方向の回転 を独立にするようになってるね。これとは違うんだけど、だいぶ前に、Yahoo! 知恵袋で、Excel VBA でワイヤーフレームするプログラム書いたんだけど、それ、参考になるかも。 僕のこの例では 任意の回転軸 R を設定して、その軸を中心に 回転する場合の実装になってるんだ。 http://www.geocities.jp/chiebukuro_16074421/index.html 回転軸 R = (Rx, Ry, Rz) ただし 単位ベクトル 回転角度 θ 回転させる前の点の座標 (Xo, Yo, Zo) 回転させた後の点の座標 (X, Y, Z) 回転行列 Mxx = Rx * Rx * (1 - Cosθ) + Cosθ Mxy = Rx * Ry * (1 - Cosθ) - Rz * Sinθ Mxz = Rz * Rx * (1 - Cosθ) + Ry * Sinθ Myx = Rx * Ry * (1 - Cosθ) + Rz * Sinθ Myy = Ry * Ry * (1 - Cosθ) + Cosθ Myz = Ry * Rz * (1 - Cosθ) - Rx * Sinθ Mzx = Rz * Rx * (1 - Cosθ) - Ry * Sinθ Mzy = Ry * Rz * (1 - Cosθ) + Rx * Sinθ Mzz = Rz * Rz * (1 - Cosθ) + Cosθ X = Mxx * Xo + Mxy * Yo + Mxz * Zo Y = Myx * Xo + Myy * Yo + Myz * Zo Z = Mzx * Xo + Mzy * Yo + Mzz * Zo joseph_joey_tribbiani

参考URL:
http://www.geocities.jp/chiebukuro_16074421/index.html

関連するQ&A