Entries

直線の終点に矢印を付加する関数(arrowline())の作成(Processing1.5.1)

直線の終点に矢印を付加する関数(arrowline())を作ってみました。
atan2()を使えば楽勝です。とか言ってる割には、最近まで逆関数なるものの
存在自体知りませんでした(汗....)
ソースと動作イメージをアップします。

arrowline()については2通り書いておきます。
pushMatrix()、translate()、popMatrix()を使う方法は
その有用性を認めながらも使うメリットがあるのかどうかを今
自分なりに調べている所です。汎用性をもったライブラリの類を作る
場合には良いのかもしれません。

動作イメージ:


arrowline()動作イメージ



ソース:


// 直線の終点に矢印を付加する関数(arrowline())の作成
// Adding a directional line(=arrow-line)
// 仕様:
// 矢のサイズは 20(pixel), 角度は、左右に20度づつ。
// 必要に応じてカスタマイズしてください。
//
// 2011-12-25 by Matsushiro

int arrow_angle = 20;
int arrow_headlen = 20;

void setup(){
size(400, 400);
smooth();

// 表示テスト
// 斜め線
arrowline(180, 180, 20 , 20);
arrowline(180, 220, 20, 380);
arrowline(220, 180, 380, 20);
arrowline(220, 220, 380, 380);

// x軸、y軸に平行な線
arrowline(60, 70, 60, 330);
arrowline(340, 330, 340, 70);
arrowline(70, 60, 330, 60);
arrowline(330, 340, 70, 340);

noLoop();
}

void draw(){
}

void arrowline(int x1, int y1, int x2, int y2){

line(x1, y1, x2, y2);

float dx = x2-x1;
float dy = y2-y1;
float theta = atan2(dy, dx)-PI;

line(x2, y2, arrow_headlen*cos(theta+radians(arrow_angle))+x2, arrow_headlen*sin(theta+radians(arrow_angle))+y2);
line(x2, y2, arrow_headlen*cos(theta-radians(arrow_angle))+x2, arrow_headlen*sin(theta-radians(arrow_angle))+y2);

}

/* pattern 2
void arrowline(int x1, int y1, int x2, int y2){

line(x1, y1, x2, y2);

pushMatrix();
translate(x2, y2);

float dx = x2-x1;
float dy = y2-y1;
float theta = atan2(dy, dx)-PI;

line(0, 0, arrow_headlen*cos(theta+radians(arrow_angle)), arrow_headlen*sin(theta+radians(arrow_angle)));
line(0, 0, arrow_headlen*cos(theta-radians(arrow_angle)), arrow_headlen*sin(theta-radians(arrow_angle)));

popMatrix();
}
*/

スポンサーサイト
この記事に対してトラックバックを送信する(FC2ブログユーザー)
http://tadpolizemedia.blog118.fc2.com/tb.php/162-2ea6a9e4

0件のトラックバック

0件のコメント

コメントの投稿

投稿フォーム
投稿した内容は管理者にだけ閲覧出来ます

Appendix

プロフィール

 二代目松四郎

Author: 二代目松四郎


「カメラと動画(+スチル写真)」
「音響と音楽」
「プログラミング」
を主なテーマに活動しています。
映画館と美術館と音楽ホールと
古い街並みが私の学校。

宮城県仙台市在住。

カテゴリー

ブログ内検索

ブロとも申請フォーム

この人とブロともになる

Counter