- 締切済み
直線を描くアルゴリズムが解りません(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
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- yama1718
- ベストアンサー率41% (670/1618)
直線の公式は 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を加えます。
- f272
- ベストアンサー率46% (8467/18126)
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