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

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

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

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

Q&A

解決済

1回答

1873閲覧

processingのblendMode(BLEND);についてと、point();の位置について

mana_mana419

総合スコア27

Processing

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

0グッド

0クリップ

投稿2020/02/04 05:46

編集2020/02/04 05:52

お世話になります。ただいまprocessingを使っており、blendMode(BLEND);とpoint();の位置について疑問が生じたため質問させていただきました。

processing

1int NUM = 10000; //配列の数 2float [] x = new float [NUM]; //X座標 3float [] y = new float [NUM]; //Y座標 4 5void setup(){ 6 size(800,600,P2D); 7 frameRate(60); 8 background(0); 9 //配列の数だけ繰り返す 10 for(int i = 0 ; i < NUM ; i++){ 11 x[i] = random(width); 12 y[i] = random(height); 13 } 14} 15 16void draw(){ 17 blendMode(ADD); //色は加算 18 stroke(63); 19 noFill(); 20 21 //配列の数だけ繰り返し 22 for(int i = 0 ; i < NUM ; i++){ 23point(x[i],y[i]); //点を描画 24 x[i] = x[i] + random( -1.0,1.0); //x座標をランダムに移動する 25 y[i] = y[i] + random( -1.0,1.0); //y座標をランダムに移動する 26 } 27 28 blendMode(BLEND); 29 noStroke(); 30 fill(0,5); 31 rect(0,0,width,height); 32}

この中の

processing

1 //配列の数だけ繰り返し 2 for(int i = 0 ; i < NUM ; i++){ 3point(x[i],y[i]); //点を描画 4 x[i] = x[i] + random( -1.0,1.0); //x座標をランダムに移動する 5 y[i] = y[i] + random( -1.0,1.0); //y座標をランダムに移動する 6 }

ここのコードでpoint();の位置はここよりも、この下のx[i]とy[i]のコードの下、つまりfor文の最後に書くべきなのではないかと感じました。xとyがランダムに移動した後に描画するべきだと思い、こう感じたのですが、このままのコードでもfor文の最後に書いても結果が同じでどうしてなんだろうと思いました。

また

processing

1blendMode(BLEND); 2 noStroke(); 3 fill(0,5); 4 rect(0,0,width,height);

何故この一連のコードでADDで加算された色をフェードアウトできるのでしょうか?おそらくなのですが、教科書でblendMode(BLEND);の説明文に線型に補完するとあり、この意味を理解できていないと感じております。

長く、読みづらくてすいません。もしわかる方がおられましたら、是非お力を貸していただきたいです。よろしくお願いいたしますm(_ _)m

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

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

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

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

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

guest

回答1

0

ベストアンサー

違う内容を一つの質問に合わせないで欲しいな、とは思いますがともかく。

このままのコードでもfor文の最後に書いても結果が同じ

本当に同じでしょうか。元のプログラムでは乱数をプロットしていますから、結果として違いが意味を持ちませんが。

例えば以下のプログラムで描かれる2本の線は違いますし、その違いは「どちらかが正しい」と言える性質のものではありません。

Processing

1size(300,200); 2 3scale(3,1); 4 5stroke(255,0,0); 6int x=10; 7for(int n=0;n<80;n++){ 8 point(x,95); 9 x++; 10} 11 12stroke(0,0,255); 13x=10; 14for(int n=0;n<80;n++){ 15 x++; 16 point(x,105); 17}

質問のプログラムでは、意味としては
今現在のx[i],y[i]をプロットして、x[i],y[i]を更新する(次回の描画に備える)
としているわけで、そうしないと最初に(setup()で)設定したx[i],y[i]のプロットは為されないわけですからこれでいいのでしょう。


線型に補完する

これ、公式サイトの説明間違ってないかなぁ。

BLEND - linear interpolation of colors: C = A*factor + B. This is the default.

この式の部分、C= (Afactor + B(255-factor))/255 じゃないかしら。(colorModeの設定によっては255じゃない値がfactorの最高値かも知れませんが) これだと「線形補間」に見えるでしょう。

投稿2020/02/05 13:25

thkana

総合スコア7703

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

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

mana_mana419

2020/02/06 14:55

いつも丁寧に回答していただき、お力を貸してくださり本当にありがとうございますm(_ _)m 違う内容を一つにして出してしまいすいません(汗) 一つのプログラムの中に複数わからないところがあるとつい1度にきいてしまいたくなってました、、、 今回もとてもわかりやすい説明をしていただき、自分なりに理解することができました! 本当にいつもありがとうございます( ^∀^)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問