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

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

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

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

Q&A

解決済

1回答

399閲覧

Processing 直線から一定の角度に沿って図形を動かす pt2(描画を始める座標が変化するため、保存したい)

_jii_

総合スコア3

Processing

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

0グッド

0クリップ

投稿2022/01/18 15:21

編集2022/01/19 03:16

イメージ説明図のように、動きを実装したいと思っています。

そして行いたいことは、
「通過点(mx,my)の座標を保存し、そこを軸に動くアニメーションです」
です。

そこで、

Processing

1 v = (new PVector(end_x-start_x,end_y-start_y)).normalize(); 2rad =v.heading(); 3 4if((video.duration()/5) < time && time < (video.duration()*3/5)){ 5if(i==1){ 6 mx=ex; 7 my=ey; 8 i++; 9} 10 pushMatrix(); 11 translate(mx,my); 12 rotate(rad); 13 rect(-t,0,30,30); 14 rect(-t,-t,30,30); 15 rect(-t,-t,30,30); 16 t=t+30 17 popMatrix(); 18} 19 20if((video.duration()*2/5) < time && time < (video.duration()*4/5)){ 21if(i2==1){ 22 mx2=ex; 23 my2=ey; 24 i2++; 25} 26 pushMatrix(); 27 translate(mx2,my2); 28 rotate(rad); 29 rect(-t,0,30,30); 30 rect(-t,-t,30,30); 31 rect(-t,-t,30,30); 32 t=t+30 33 popMatrix(); 34}

draw関数の一部です。
これで図形がうまく思うところに描画されないのは、ifの時間の範囲が被っているために、
translateで原点が(mx,my)の時に次の(mx2,my2)に(ex,ey)が代入されるなどして、座標の位置関係がよくわからないことになってしまっているのでしょうか。

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

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

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

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

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

thkana

2022/01/18 23:39 編集

どのようにしたいかを、手描きでいいので図で表すとかできませんか? 「直線からの角度」の言葉の意味がわかりません。 うまくいっていないプログラム片を並べられても、なにをやりたいかこちらには見えません。 まず「やりたいことの説明」をしっかりしてから、それとの乖離を説明していただけるとついていけるかと思います。
_jii_

2022/01/19 03:17

いつもご指摘いただき誠にありがとうございます。 わかっていただけるように変更したつもりではあるので、よろしければ確認していただき、ご意見いただけると幸いです。
guest

回答1

0

ベストアンサー

やりたいことがイマイチわからないのだけれど、こうかな、というのをとにかく作ってみました。
わかりやすいかとか考えずにガシガシ書いたので、まずはこういうことでいいのかを教えて下さい。

Processing

1class MovingBox { 2 float th; 3 int t; 4 float x, y; 5 MovingBox(float mx, float my, float th) { 6 this.x=mx; 7 this.y=my; 8 this.th=th; 9 } 10 void update() { 11 pushMatrix(); 12 translate(x, y); 13 line(0, 0, -100*cos(th), -100*sin(th)); 14 rectMode(CENTER); 15 fill(255, 255, 0); 16 rect(-t*cos(th), -t*sin(th), 20, 10); 17 t++; 18 popMatrix(); 19 } 20} 21 22MovingBox box1, box2; 23float sx, sy; 24float ex, ey; 25int t; 26PVector v; 27 28void setup() { 29 size(500, 300); 30 sx=10; 31 sy=height/3; 32 ex=width-10; 33 ey=height/3*2; 34 v=(new PVector(ex-sx, ey-sy)).normalize(); 35 rectMode(CENTER); 36 frameRate(40); 37} 38 39void draw() { 40 background(0xcc); 41 stroke(0); 42 line(sx, sy, ex, ey); 43 float xx=sx+t*v.x; 44 float yy=sy+t*v.y; 45 if (xx<ex) { 46 fill(0, 255, 0); 47 rect(xx, yy, 40, 20); 48 if (t==200) { 49 box1=new MovingBox(xx, yy, atan2(v.y, v.x)+QUARTER_PI); 50 } 51 if (t==300) { 52 box2=new MovingBox(xx, yy, atan2(v.y, v.x)-QUARTER_PI); 53 } 54 } 55 if (box1!=null) { 56 box1.update(); 57 } 58 if (box2!=null) { 59 box2.update(); 60 } 61 t++; 62}

投稿2022/01/19 12:53

編集2022/01/19 12:55
thkana

総合スコア7629

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

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

_jii_

2022/01/21 08:36

ありがとうございます! 少し変更を加えれば、実装できそうな感じになりました 最初から最後まで本当にありがとうございましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問