質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1622閲覧

java 三角錐の展開図の表示(色反映)

yasu_abu7

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/10/10 02:49

編集2018/10/10 07:09

javaで三角錐の展開図を表示したいのですが、小さい三角のところに色を反映させたものをGUIで表示したいのです。
それも、色データを二次元配列で入っているデータ(1が黄色、2が青色、3が赤色、4が緑色、全部で36個あります)を用いて反映したいです。
どうすれば色が反映した三角錐の展開図の表示ができるのでしょうか?
わかる方の返答お待ちしています。

ちなみに、一面で小さい三角が9個あります。それが、4面あります。
![イメイメージ説明

色データを参照してこの真ん中にある小さい三角に色を反映したいです。
現在は、一面の三角形を表示することはできています。そのソースが以下になります。

java

1import java.applet.Applet; 2import java.awt.Graphics; 3import java.awt.Graphics2D; 4import java.awt.Color; 5/* 6<applet code="takakkei.class" width="900" height="900"> 7</applet> 8*/ 9public class takakkei extends Applet{ 10 11 public void paint(Graphics g){ 12 13 int x1[] = {500,600,550}; 14 int y1[] = {100,100,20}; 15 16 g.drawPolygon(x1,y1,3); 17 g.setColor(Color.ORANGE); 18 19 int x2[] = {450,550,500}; 20 int y2[] = {180,180,100}; 21 g.drawPolygon(x2,y2,3); 22 23 int x3[] = {500,600,550}; 24 int y3[] = {100,100,180}; 25 g.drawPolygon(x3,y3,3); 26 27 int x4[] = {550,650,600}; 28 int y4[] = {180,180,100}; 29 g.drawPolygon(x4,y4,3); 30 31 int x5[] = {400,500,450}; 32 int y5[] = {260,260,180}; 33 g.drawPolygon(x5,y5,3); 34 35 int x6[] = {450,550,500}; 36 int y6[] = {180,180,260}; 37 g.drawPolygon(x6,y6,3); 38 39 int x7[] = {500,600,550}; 40 int y7[] = {260,260,180}; 41 g.drawPolygon(x7,y7,3); 42 43 int x8[] = {550,650,600}; 44 int y8[] = {180,180,260}; 45 g.drawPolygon(x8,y8,3); 46 47 int x9[] = {600,700,650}; 48 int y9[] = {260,260,180}; 49 g.drawPolygon(x9,y9,3); 50 } 51} 52

詰まっているところは、この表示している小さい三角(9個)に色を反映するところです。そして、その反映させるために、色データ("1","2","3","4")を用いて反映させたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dice142

2018/10/10 05:39

Javaの描画処理であればJavaFXやSwingなどで実装できるので、まずはやってみましょう。
yasu_abu7

2018/10/10 05:51

わかりました。ありがとうございます。
coco_bauer

2018/10/10 05:56

三角錐の表面は4つの三角形で覆われていますから、展開図は4つの三角形で構成されます。それと、配列に張っている36個のデータの関係が判りません。「一面で小さい三角形が9個」と展開図の関係も理解できません。こうした事が判る図を質問に追加すると良いのではないでしょうか。
yasu_abu7

2018/10/10 06:34

すみません。文字だけだとわかりづらいですよね... ですので、わかりやすいように図を追加しました。回答お待ちしています。現在は、Swingで展開図は表示はできましたが、小さい三角に色を反映する方法が全く分からない状況です。わかる方の返答お待ちしています。
dice142

2018/10/10 06:58

今現在出来ているところ、詰まっているところ、コードを質問文に反映してください。ここに追記するより回答が集まりやすくなります。
yasu_abu7

2018/10/10 07:09

何回もすみません。変更しました。ご返答お待ちしています
guest

回答1

0

ベストアンサー

この表示している小さい三角(9個)に色を反映するところです。

各三角形に別々に色を充てるならg.drawPolygon()の前にg.setColor()をする必要があります。
塗りつぶしたいということであればg.fillPolygon()を使いましょう。

その反映させるために、色データ("1","2","3","4")を用いて反映させたいです。

色データに従って分岐処理などをすればできると思います。

Java

1if (色データ == 1) { 2 g.setColor(Color.RED); 3} else if (...) { 4... 5}

投稿2018/10/10 07:22

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yasu_abu7

2018/10/10 08:04

すみません。お尋ねしたいんですが、今以下のソースで動かそうとしています。if(num== "1")のかっこの中に int x1[] = {500,600,550}; int y1[] = {100,100,20}; g.fillPolygon(x1, y1, 3); g.setColor(Color.RED); g.drawPolygon(x1,y1,3); を入れればよろしいのでしょうか? import java.applet.Applet; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Color; /* <applet code="takakkei.class" width="900" height="900"> </applet> */ public class takakkei extends Applet{ int[][]S = { {3,2,4,4,1,2,3,3,1},//1:2個2:2個3:3個4:2個 {1,1,3,2,4,2,1,4,2},//1:3個2:3個3:1個4:2個 {3,1,4,4,1,3,2,4,3},//1:2個2:1個3:3個4:3個 {2,1,4,1,3,3,4,2,2}//1:2個2:3個3:2個4:2個 }; String[][]V = { {"0","0","0","0","0","0","0","0","0"}, {"0","0","0","0","0","0","0","0","0"}, {"0","0","0","0","0","0","0","0","0"}, {"0","0","0","0","0","0","0","0","0"} }; int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0; public void paint(Graphics g){ for(int o = 0; o < S.length;o++){ for(int y = 0; y< S[o].length;y++){ V[o][y] = String.valueOf(S[o][y]); System.out.println(V[o][y]); } } for(String[] arr : V){ for(String num : arr){ if("1".equals(num)){cnt1++;} if("2".equals(num)){cnt2++;} if("3".equals(num)){cnt3++;} if("4".equals(num)){cnt4++;} if( num == "1"){ }else if (num == "2"){ g.setColor(Color.BLUE); }else if(num == "3"){ g.setColor(Color.GREEN); }else if(num == "4"){ g.setColor(Color.YELLOW); } } } int x1[] = {500,600,550}; int y1[] = {100,100,20}; g.fillPolygon(x1, y1, 3); g.setColor(Color.RED); g.drawPolygon(x1,y1,3); }
dice142

2018/10/10 08:15

> if(num== "1")のかっこの中に...を入れればよろしいのでしょうか? そうですね。 ただし、いくつか指摘しておきます。 - ループして使うのであればx1, y1の座標は固定値では使えないので計算する必要があります。 - 文字列の比較は「==」ではありません。 - 「g.fillPolygon()」と「g.drawPolygon()」は併用する必要はありません。
yasu_abu7

2018/10/10 08:40

いろいろ試したのですが、うまくいきません。三角が表示されなくなりました。。。 どのように修繕すればよろしいですか? import java.applet.Applet; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Color; /* <applet code="takakkei.class" width="900" height="900"> </applet> */ public class takakkei extends Applet{ int[][]S = { {3,2,4,4,1,2,3,3,1},//1:2個2:2個3:3個4:2個 {1,1,3,2,4,2,1,4,2},//1:3個2:3個3:1個4:2個 {3,1,4,4,1,3,2,4,3},//1:2個2:1個3:3個4:3個 {2,1,4,1,3,3,4,2,2}//1:2個2:3個3:2個4:2個 }; String[][]V = { {"0","0","0","0","0","0","0","0","0"}, {"0","0","0","0","0","0","0","0","0"}, {"0","0","0","0","0","0","0","0","0"}, {"0","0","0","0","0","0","0","0","0"} }; int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0; String num; int x1[] = {500,600,550}; int y1[] = {100,100,20}; int x2[] = {450,550,500}; int y2[] = {180,180,100}; int x3[] = {500,600,550}; int y3[] = {100,100,180}; int x4[] = {550,650,600}; int y4[] = {180,180,100}; int x5[] = {400,500,450}; int y5[] = {260,260,180}; int x6[] = {450,550,500}; int y6[] = {180,180,260}; int x7[] = {500,600,550}; int y7[] = {260,260,180}; int x8[] = {550,650,600}; int y8[] = {180,180,260}; int x9[] = {600,700,650}; int y9[] = {260,260,180}; public void paint(Graphics g){ for(int o = 0; o < S.length;o++){ for(int y = 0; y< S[o].length;y++){ V[o][y] = String.valueOf(S[o][y]); System.out.println(V[o][y]); } } for(String[] arr : V){ for(String num : arr){ if("1".equals(num)){cnt1++;} if("2".equals(num)){cnt2++;} if("3".equals(num)){cnt3++;} if("4".equals(num)){cnt4++;} } } cnt5 = cnt1 + cnt2 + cnt3 + cnt4; System.out.println("合計は:"+cnt5); if( num == "1"){ g.setColor(Color.RED); g.fillPolygon(x1, y1, 3); g.setColor(Color.RED); }else if (num == "2"){ g.setColor(Color.BLUE); g.fillPolygon(x1, y1, 3); g.setColor(Color.BLUE); }else if(num == "3"){ g.fillPolygon(x1, y1, 3); g.setColor(Color.GREEN); }else if(num == "4"){ g.fillPolygon(x1, y1, 3); g.setColor(Color.YELLOW); } }
dice142

2018/10/10 08:46

> - 文字列の比較は「==」ではありません。 こちらが解決されていないからかと。
yasu_abu7

2018/10/10 09:02

文字列を比較するところを変更しました。しかし、三角形がうまく表示されません。どうすればよろしいでしょうか? import java.applet.Applet; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Color; /* <applet code="takakkei.class" width="900" height="900"> </applet> */ public class takakkei extends Applet{ int[][]S = { {3,2,4,4,1,2,3,3,1},//1:2個2:2個3:3個4:2個 {1,1,3,2,4,2,1,4,2},//1:3個2:3個3:1個4:2個 {3,1,4,4,1,3,2,4,3},//1:2個2:1個3:3個4:3個 {2,1,4,1,3,3,4,2,2}//1:2個2:3個3:2個4:2個 }; String[][]V = { {"0","0","0","0","0","0","0","0","0"}, {"0","0","0","0","0","0","0","0","0"}, {"0","0","0","0","0","0","0","0","0"}, {"0","0","0","0","0","0","0","0","0"} }; int cnt1=0,cnt2=0,cnt3=0,cnt4=0,cnt5=0; String num; int x1[] = {500,600,550}; int y1[] = {100,100,20}; int x2[] = {450,550,500}; int y2[] = {180,180,100}; int x3[] = {500,600,550}; int y3[] = {100,100,180}; int x4[] = {550,650,600}; int y4[] = {180,180,100}; int x5[] = {400,500,450}; int y5[] = {260,260,180}; int x6[] = {450,550,500}; int y6[] = {180,180,260}; int x7[] = {500,600,550}; int y7[] = {260,260,180}; int x8[] = {550,650,600}; int y8[] = {180,180,260}; int x9[] = {600,700,650}; int y9[] = {260,260,180}; public void paint(Graphics g){ for(int o = 0; o < S.length;o++){ for(int y = 0; y< S[o].length;y++){ V[o][y] = String.valueOf(S[o][y]); System.out.println(V[o][y]); } } for(String[] arr : V){ for(String num : arr){ if("1".equals(num)){cnt1++;} if("2".equals(num)){cnt2++;} if("3".equals(num)){cnt3++;} if("4".equals(num)){cnt4++;} } } cnt5 = cnt1 + cnt2 + cnt3 + cnt4; System.out.println("合計は:"+cnt5); if( "1".equals(num) ){ g.fillPolygon(x1, y1, 3); g.setColor(Color.RED); }else if ("2".equals(num)){ g.fillPolygon(x2, y2, 3); g.setColor(Color.BLUE); }else if("3".equals(num)){ g.fillPolygon(x3, y3, 3); g.setColor(Color.GREEN); }else if("4".equals(num)){ g.fillPolygon(x4, y4, 3); g.setColor(Color.YELLOW); } }
dice142

2018/10/10 09:08

よくプログラムやエラーを見てください。 numはfor文で宣言した変数なので、その場所では使えません。 本質問の主題は「GUIで表示すること」ですよね? 色を使うこと、色データを反映することは主題から外れているので あまり長々とコメント欄で質疑応答するのは良いものとは思えません。 一度本質問を終えてから別な質問を立ててはどうでしょう?
yasu_abu7

2018/10/10 09:43

すみません。本質問の趣旨がはずれてしまいました。 自分で試行錯誤してうまくGUIで三角形を表示できました。 何度も質問してしまい、すみませんでした。 プログラムの勉学を日々精進していきたいと思います。 ご返答ありがとうございました。
dice142

2018/10/10 09:49

無事できたようで何よりです。 質問すること自体は良いことなので、自分で考えてわからない時は (なるべく回答しやすいような情報を付けて)質問しましょう。 引き続き頑張ってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問