• 締切済み

Java 配列 せん断

急いでいます!!Java初心者のため、全くわかりません。。。 おそらく二次元配列なのですが、図形をせん断移動、回転移動させたプログラムはどのように作ればよいのでしょうか。 せん断 x'=x+by y'=y 回転 x'=x*cosθ-y*sinθ y'=x*sinθ+y*cosθ という式を教えてもらったのですがこの式を入れてもでてきません。 助けてください。。。

みんなの回答

  • prophetok
  • ベストアンサー率44% (13/29)
回答No.2

冗長で無駄ばかりのコードだけど、基本的には間違えている点はないようなので、ただ単に描画が現在のウィンドウの範囲外にされているだけだと思う。 試しに xx2[a]=xx1[a] + 2 * yy1[a]; を xx2[a]=xx1[a] + (int)(0.1 * yy1[a]); に変更して試してみたらどう?

saaatomi00
質問者

お礼

ありがとうございます!!出来ました!! 今まで小数点をつけたらエラーがでてきたのですが、(int)と前にいれるんですね。 助かりました。 ありがとうございます!!

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

どのようなコード書いて どのようなデータを与え どのような結果になったか 本来期待する結果とどのように食い違っているのかを明示しましょう sin/cosなどの引数は 度(DEG)では無くラジアン(RAD)を使いますよ rad = 度 * 円周率(パイ) / 180 つまり 180度で1パイ 90度で1/2パイ 45度で1/4パイ 30度で1/6パイ といった関係になります パイは Math.PI などで定数が設定されています

saaatomi00
質問者

補足

回答ありがとうございます!! このようにプログラムしました。 import java.applet.*; import java.awt.Graphics; import java.awt.Color; public class gakuku10 extends Applet { public void paint(Graphics g) { int i; int[] x1={100,100,120,120,100,120}; int[] y1={110,100,100,115,130,130}; for (i=0 ; i<=4 ; ++i ){ g.drawLine(x1[i],y1[i],x1[i+1],y1[i+1]); } int i2,a; g.setColor(Color.red); int[] xx1={100,100,120,120,100,120}; int[] yy1={110,100,100,115,130,130}; int[] xx2=new int[7]; int[] yy2=new int[7]; for (a=0 ; a<=5 ; ++a){ xx2[a]=xx1[a] + 2 * yy1[a]; yy2[a]=yy1[a]; } for (i2=0 ; i2<=4 ; ++i2 ){ g.drawLine(xx2[i2],yy2[i2],xx2[i2+1],yy2[i2+1]); } } } 本来なら、この2に重なるようにして移動した赤の2が表示されるはずなのですが。。。 これはせん断のプログラムです。

関連するQ&A