Lineで引いた線の座標


ざくざく  2005-11-30 17:21:10  No: 128410

Picture1.Line (5,5)-(30,50)

と描き、ラインをひいたのですが、このラインが通った各点の
座標を取得する方法はありますか。


ガッ  2005-11-30 17:26:30  No: 128411

中学程度の数学で求められると思いますが…?


我龍院忠太  2005-11-30 18:17:18  No: 128412

>このラインが通った各点の座標
線は無数の点の集まりなので、優秀な中学生でも答えの出しようがない。(^^;
線が表示されてる、ピクセルのことを言ってるのでしょうか?
それだと処理がちと面倒な気もするが。


いな  2005-11-30 18:20:40  No: 128413

>線は無数の点の集まりなので、優秀な中学生でも答えの出しようがない。(^^;

あれ?、サイン・コサイン・タンジェントって確か中学で習ったような
気がしたんだが、気のせいだったかなぁ〜


我龍院忠太  2005-11-30 18:24:52  No: 128414

>あれ?、サイン・コサイン・タンジェントって確か中学で習ったような
>気がしたんだが、気のせいだったかなぁ〜
気のせいでしょう。
三角関数は、普通高校で習うのですが、日本では。


いな  2005-11-30 18:40:24  No: 128415

> 三角関数は、普通高校で習うのですが、日本では。

なるほど、海外に居たので、その辺り曖昧になっていたようです。
確かに、高校でもやっていましたね。


我龍院忠太  2005-11-30 18:58:01  No: 128416

三角関数が出てきてしまいましたが、要するに言いたかったことは
質問の内容が良くわからないということです。
Lineで線を引いた時に線がどのピクセルに表示されているか調べるのは
丸め誤差の問題があり、ちと厄介かなと思ったのですが、もしかしたら
良い方法が有るかもしれません。
もちろん線が通る点の座標を全て列挙するのは、現在の数学では困難
で有ると言うことは、御理解いただけるものと思いますが。


ああああ  2005-11-30 20:01:32  No: 128417

三角関数を使う必要はありません。
直線でなお且つ始点と終点の座標値がわかっていれば
比の問題です。


夏の朝も天玉うどん  2005-11-30 21:27:14  No: 128418

Lineで線を引いた時に線がどのピクセルに表示されているか調べるので
あれば線を引く前の画像を保存しておき、線を引いた後の画像との比較で
調べることも出来ます。(効率は悪いが)
他に自分でブレゼンハムのアルゴリズムで線を引き、このとき
各点の座標を取得する手段もあります。


マグ  2005-12-01 01:38:53  No: 128419

比を使うより1次方程式の方が楽だと思います。
おそらく、ガッさんはこのことを言っていると思いますよ。きっと。
よって、中学程度のレベルの問題になってくると思います。


夏の朝も天玉うどん  2005-12-01 04:51:52  No: 128420

先に書いたことの補足をします。線が引かれたピクセルを調べるときに引かれる前の画像との比較をする際に X,Y でループをまわすと効率が悪いので
皆さんが先に述べているような方法で点が打たれた(線が引かれた)
ピクセルの位置に当たりをつけ、その前後のピクセルの変化をチエック
することで高速に調べることができます。

各点の座標=ピクセルのX、Yであれば・・


コボル  2005-12-01 07:19:07  No: 128421

ベクトルの内分点でもとめるとか。


ざくざく  2005-12-01 09:10:01  No: 128422

質問の内容があいまいでした。申し訳ありません。

「直線を構成している各ピクセルの座標(x,y)」を
取得したく思っておりました。

アドバイスを読んで、わたしのレペルでは、そう簡単なことでは
ないのだとわかりました。
とりあえず、最後に頂いたアドバイスの「前の画像と比較」
の方法のプログラムを作成して、動作させてみたいと思います。

お返事ありがとうございました。


夏の朝も天玉うどん  2005-12-01 21:14:47  No: 128423

度々すいません。また補足させていただきます。
画像のサイズにもよりますが、線を引く前の
画像をすべて保存するのはどうにもメモリ効率が
悪そうです。
そこで線が通りそうなピクセル周辺の色だけを
保存する手段が考えられそうです。

思いつきだけで書いています。すいません。


X_File  2005-12-01 22:17:22  No: 128424

ScaleModeは当然ピクセルで

もし、Picture1.Line (a1,b1)-(a2,b2)の
a1<>a2 かつ b1<>b2
ならピタゴラスの定理にて線の長さを求める。

    線の長さ=Sqr(Abs(a1-a2)^2 + Abs(b1-b2)^2)

a1=a2 なら 線の長さ=Abs(b1-b2)
b1=b2 なら 線の長さ=Abs(a1-a2)

そして比を求める
    横比=Abs(a1-a2)/線の長さ
    縦比=Abs(b1-b2)/線の長さ

後は比を元に計算処理でポイントの座標を求める
どっかおかしかったら確認よろ


ああああ  2005-12-05 23:42:21  No: 128425

ピタゴラスの定理も必要ありません。
例えばp0(x0, y0),p1(x1, y1)を始点および終点とする線分の中天は
  x = (x0 + x1 )/2
  y = (y0 + y1 )/2
であり、同じ様に線分を3等分する線分上の2点は
  x = (x0 + x1 )/3
  y = (y0 + y1 )/3
および
  x = 2 * (x0 + x1 )/3
  y = 2 * (y0 + y1 )/3
です。


ガッ  2005-12-05 23:54:18  No: 128426

うーん、離散数学となると 夏の朝も天玉うどん さんのアルゴリズムが適用できますね。
中身は中学で習うことのちょっと拡張版程度なのでどうってことないですが。
逆に実数値に近い計算をすると、実際のアルゴリズムと誤差がでる"かも"わかりません。

というか、線の座標集めて何するつもりだったんだろ…


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加