プロが教えるわが家の防犯対策術!

ブレゼンハムのアルゴリズムについて
C言語で直線描画のプログラミングをしています。
複数の点P_1=(x1,y1),P_2=(x2,y2).... を結ぶ直線を描画するにあたり、
ブレゼンハムのアルゴリズムを用いようと思ったのですが、
描きたい直線の傾きが負の場合、また、傾きが1をこえる場合にうまく描画できず困っております。
P1とP2の位置関係に関係なく線を引くにはどうすればよいでしょうか。

画像にソースコードの一部を添付します。
当方プログラミングに関しては初心者なので改善点などがあれば合わせて指摘していただけると嬉しいです。
配列vx[i]、vy[i]には線で結びたい点P_i(i=1,2,3...)点のx座標、y座標が格納されており、
座標に点を打つ関数は作成済みです。

よろしくお願いします。

「ブレゼンハムのアルゴリズムについて(プロ」の質問画像

質問者からの補足コメント

  • 一箇所訂正があります。

    y = x2; となっているところですが、 y = y1; の間違いです。

      補足日時:2016/02/03 17:43

A 回答 (1件)

> 描きたい直線の傾きが負の場合、また、傾きが1をこえる場合にうまく描画できず困っております。



傾きが正の1未満になるように変換して計算すれば良いのでは?
具体的には
・傾きが1より大きいとき
 直線y=xに対象な点に変換、すなわちxとyの入れ替えをして計算し、描画時に戻す。
・傾きが1未満の負のとき
 直線x=0に対象な点に変換、すなわちy=-yの入れ替えをして計算し、描画時に戻す。
・傾きが1より大きい負のとき
 上記2つを組み合わせる。
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!