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

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

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

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

3回答

284閲覧

時計プログラムの一部分をfor文を使って短縮したいです

toyohasi_24

総合スコア5

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2020/03/08 02:30

編集2020/03/10 14:55

以前も同じプログラムで質問したのですが、また別の方法で書きたく再度質問させてもらいました。

mm = minute();
rad =radians(mm*(360/60)-90);
strokeWeight(2);
x = cos(rad)*200+250;
y = sin(rad)*200+250;
line(250,250,x,y);


x = cos(rad)*200+250;
y = sin(rad)*200+250;
line(250,250,x,y);
部分をfor文で繰り返し文を作りたいです
細かく指定させて貰いますと、

for(int i =1; i<3; i++)で始まるfor文を作りたいのです。
for文とif文の組み合わせで、中心を動かさないように指定させる方法が詰んでまして・・・。

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

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

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

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

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

thkana

2020/03/08 03:57

どういう観点から「別の方法」を知りたいと思ったのですか。 以前教わった方法で一旦は満足したので解決にしたのだと思いますが、 それで問題となることがあったのならそれを知ればより適切な回答が出来そうな気がします。 #関数は教わってないから使っちゃダメって言われた、とかじゃないですよね?
thkana

2020/03/11 13:41

> for(int i =1; i<3; i++) iは1と2でループしますが、それでどうしろというのでしょうか。 > for文とif文の組み合わせで、中心を動かさないように指定させる 意味がわかりません...「中心を動かす」とはどういうことでしょうか。 なにかの課題なら、問題文をそのまま示して下さい。伝言ゲームになるとお互い時間の無駄です。
guest

回答3

0

何を求めているのかわからないのでこれでいいのかどうか。
とにかく、for(int i=0;i<3;i++)とif文は使った。
中心云々はなにを欲しているのかわからない。

Processing

1void setup() { 2 size(500, 500); 3 background(0); 4 smooth(); 5 stroke(255); 6} 7 8void draw() { 9 background(0); 10 float[] rads={radians(second()*360/60.0-90), 11 radians(minute()*360/60.0-90), 12 radians(hour()*360/12.0-90)}; 13 for (int i=0; i<3; i++) { 14 strokeWeight(1<<i); 15 int l=100; 16 if (i!=2)l*=2; 17 float x=cos(rads[i])*l+250; 18 float y=sin(rads[i])*l+250; 19 line(250, 250, x, y); 20 } 21}

投稿2020/03/11 14:33

thkana

総合スコア7703

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

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

0

懲りずに再挑戦しますw

前回と同内容だと仮定します。
変更点

  • +250や-90がノイズになるので、translaterotateで一括変更
  • 数学苦手だとcos・sinがどっちってなるので、PVector.fromAngleでわかりやすく
  • ループしやすいように事前に配列を準備

Processing

1void setup() { 2 size(500, 500); 3 stroke(255); 4 smooth(); 5} 6 7void draw() { 8 background(0); 9 translate(250, 250); 10 rotate(-PI / 2); 11 12 float hands[][] = { 13 // 値, 係数, strokeLength, strokeWeight 14 { second(), 360 / 60, 200, 1 }, 15 { minute(), 360 / 60, 200, 2 }, 16 { hour() + (minute() / 60.0), 360 / 12, 100, 4 } }; 17 18 for (float[] hand : hands) { 19 float rad = radians(hand[0] * hand[1]); 20 PVector v = PVector.fromAngle(rad).mult(hand[2]); 21 strokeWeight(hand[3]); 22 line(0, 0, v.x, v.y); 23 } 24}

配列後半は固定値なので分けたほうが無駄がないが、スマートに分けにくかった。
名前付きタプルなんかが使えたらよかったが、ギリギリ許容範囲かなと。

四則演算が減って、個人的には意図が分かりやすくなったかなと思います。

投稿2020/03/08 04:56

TN8001

総合スコア9862

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

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

0

前の質問の継続でいいのかな?
では前回の質問で回答されていたmaaiさんの処理をfor文で使った方式で修正したものです。
maaiさんが作られたメソッドは引数が全てdoubleで配列化できますので

java

1void setup() 2{ 3 size(500,500); 4 background(0); 5 smooth(); 6 7} 8void draw() 9{ 10 background(0); 11 float ss; //second byo 12 float mm; //minute hun 13 float hh; //hour jikan 14 15 stroke(255); 16 17 ss = second(); 18 mm = minute(); 19 hh = hour()+(mm/60.0); 20 21 double[][] clocks = { 22 {ss*(360/60)-90, 1, 200}, 23 {mm*(360/60)-90, 2, 200}, 24 {hh*(360/12)-90, 4, 100}, 25 }; 26 27 for (double[] ds : clocks) { 28 double rad, x, y; 29 rad =radians(ds[0]); 30 strokeWeight(ds[1]); 31 x = cos(rad)*ds[2]+250; 32 y = sin(rad)*ds[2]+250; 33 line(250,250,x,y); 34 } 35}

投稿2020/03/08 03:44

編集2020/03/08 03:46
yureighost

総合スコア2183

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問