dポイントプレゼントキャンペーン実施中!

javaの図形なのですが、結果が球の形にそってぐるぐるっと
リンゴの皮むきのような感じの線になるはずなのですが動かない、
というよりもどこを修正すればいいのか見当もつかずさまよっています。正直、助けていただきたいです。
たぶん抜けてるところがあるはずなんですが、何が抜けてて何を入れれば良いかわからないので教えてほしいです。
importjavax.swing.*;
importjava.awt.*;
importjava.awt.event.*;
public class ui {public static void main(String[] args) {
JFrame jf = new JFrame("ui");
MyCanvasmc = 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;}}

A 回答 (1件)

たぶん、回転行列のところが違うんじゃないのかなぁ?



今回のプログラムのはX軸方向とY軸方向の回転 を独立にするようになってるね。これとは違うんだけど、だいぶ前に、Yahoo! 知恵袋で、Excel VBA でワイヤーフレームするプログラム書いたんだけど、それ、参考になるかも。 僕のこの例では 任意の回転軸 R を設定して、その軸を中心に 回転する場合の実装になってるんだ。
http://www.geocities.jp/chiebukuro_16074421/inde …

回転軸 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/inde …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!