• ベストアンサー

java アプレット

javaのアプレットについてですが、下のURLの16角のダイヤモンド図形で、 URLのソースのように、繰り返し描画せず、色もつけないで、単純に16個の頂点を持つ ダイヤモンド図形を描画する場合、URLのソースをどういじればよいのでしょうか。 ソースコードをそぎ落として、16頂点のダイヤモンド図形を単純に描画するコードを ぬきとっていただけませんでしょうか。 よろしくお願いします。 http://www.piclist.com/images/www/hobby_elec/java24_2.htm

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.2

//繰り返さないならアプレットでなくてもいいのでmainにしてあります。 //結果はc:\test.jpgにできます。 import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.lang.Math; public class Test9 { public static void main(String[] args) { int r=100; int n = 16; int x, y, x1, y1; try { BufferedImage image=new BufferedImage(r*2+10,r*2+10,BufferedImage.TYPE_INT_RGB); Graphics2D g2d=image.createGraphics(); g2d.setBackground(Color.WHITE); g2d.clearRect(0,0,r*2+10,r*2+10); g2d.setColor(Color.BLACK); x1 = r; y1 = 0; for ( double i = 360.0 / n; i <= 360.0; i += 360.0 / n ) { x = (int) ( r * Math.cos( i * Math.PI / 180 ) ); y = (int) ( r * Math.sin( i * Math.PI / 180 ) ); g2d.drawLine( x1 + r + 5, y1 * (-1) + r + 5, x + r + 5, y * (-1) + r + 5 ); x1 = x; y1 = y; } ImageIO.write(image, "JPEG", new File("c:\\test.jpg")); } catch(Exception e) { e.printStackTrace(); } } }

qwewqwe
質問者

補足

回答ありがとうございます! このプログラムでは、正n角形をかくだけで、各頂点から各頂点に向けた線分がつくれないのですが、その点について教えていただくことはできないでしょうか

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

そのプログラム、コメントも丁寧に書いてあるので、読めばわかると思うのですが。 例えば、線の色なら color = new Color( red,green,blue ); /* 線の色設定       */ とありますよね? red,green,blueを調べると red = (int) ( Math.random()*256 ); /* 赤色成分ランダム生成  */ green = (int) ( Math.random()*256); /* 緑色成分ランダム生成  */ blue = (int) (Math.random()*256); /* 青色成分ランダム生成  */ と、ランダムに決めているってありますよね?これを固定値にすれば、決めた色になるとわかりませんか? 例えば、繰り返し。 繰り返すには、ループ構造を使います。このプログラムではforとwhileが使われています。 ループの外にあれば、繰り返し実行されません。 このプログラムのループは、線の座標を計算するためのものと、描画を繰り返すためのものがあります。 描画を繰り返すループから、描画部分を外に出せば、1回した描画しなくなるはずです。

関連するQ&A