こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

直線を描くアルゴリズムが解りません(T_T)

直線を描くアルゴリズムを教えて下さい。
直線の公式はわかるのですが、これからどうやって発展させていけばよいのか検討がつきません。
yの方が傾きが大きいのでyが常にインクリメントされるのはわかります。
xはどうやって判断するのでしょうか?

(aは傾き、bは切片)
y = ax + b
始点(3,3)終点(5,7)
7y-3y = 4
5x-3x = 2
-------------------------
a = 2

3 = 2*3 + b -> -3 = b
7 = 2*5 + b -> -3 = b
---------------------------
b = -3

投稿日時 - 2015-10-20 23:39:00

QNo.9067222

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.2

直線の公式は y=ax+b だけど、実際にグラフィック画面に直線を描画するなら、
始点(x1,y1)と終点(x2,y2)が与えられて、下記の説明のプログラム1みたいになります。
http://homepage2.nifty.com/kasayan/basic/graphic2.htm
先の公式の傾きaは(y2-y1)/(x2-x1)になりますね。
この傾きaが1より小さいと角度では0~45度までの緩やかな直線で、
xはx1からx2まで1ずつ進めて、yはxに傾きaを掛けてオフセット値のy1を加えて求めます。

傾きaが1より大きいと角度では45~90度の急な直線になります。
これを前と同じ描き方をすると点が飛び飛びの点線になってしまいますね。
なので、この時はx軸とy軸を入れ替えて計算します。
つまりyをy1からy2まで1ずつ進めて、xはyに傾きaの逆数を掛けてオフセット値のx1を加えます。

投稿日時 - 2015-10-21 14:46:58

ANo.1

https://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AC%E3%82%BC%E3%83%B3%E3%83%8F%E3%83%A0%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0
function line(x0, y0, x1, y1)
dx := abs(x1-x0)
dy := abs(y1-y0)
if x0 < x1 then sx := 1 else sx := -1
if y0 < y1 then sy := 1 else sy := -1
err := dx-dy

loop
setPixel(x0,y0)
if x0 = x1 and y0 = y1 exit loop
e2 := 2*err
if e2 > -dy then
err := err - dy
x0 := x0 + sx
end if
if e2 < dx then
err := err + dx
y0 := y0 + sy
end if
end loop

投稿日時 - 2015-10-21 11:09:49

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-