中点描画方法

中点線画

基本的なアルゴリズム:
現在のピクセルポイントは(xp、yp)で、次のピクセルポイントはP1またはP2です。M=(xp + 1、yp + 0.5)を設定します。これはp1とp2の間の
中点、Qは理想的な直線であり、x = xp + 1垂直線の交点。QとMのy座標を比較します。
MがQ未満の場合、P2は次のピクセルポイント、
MはQより上、P1は次のポイント

ここに画像の説明を挿入
判別式を作成します。d= F(M)= F(xp + 1、yp + 0.5)= a(xp + 1)+ b(yp + 0.5)+ cここで、a = y0-y1、
b = x1-x0、 c = x0y1-x1y0
d <0の場合、MはLの下(Qポイント)、右上のP2を次のピクセルとし
、d> 0の場合、MはL(Qポイント)の上、右のP1を次のピクセルとします。ピクセル;
d = 0の場合、P1またはP2のいずれかを選択でき、P1が次のピクセルであることに同意します。

現在のピクセルがd³0にある場合、正の右ピクセルP1(xp + 1、yp)が取得されます。次のピクセルの位置を決定するには、d1 = F(xp + 2、yp + 0.5)= a(xp + 2 )+ b(yp + 0.5)= d + a;増分はa

d <0の場合、右上のピクセルP2(xp + 1、yp + 1)を取得します。次のピクセルを判断するには、
d2 = F(xp + 2、yp + 1.5)= a(xp + 2)+ b(yp + 1.5)+ c = d + a + b を計算する必要があります。増分はa + bです。

**線画は(x0、y0)から始まり、d d0 = F(x0 + 1、y0 + 0.5)= F(x0、y0)+ a + 0.5b = a + 0.5bの初期値です。
dの代わりに2dを使用して小数を取り除き、効率を向上させることができます。**
例:中点の描画方法
a = y1-y2 = -2 b = x2-x1 = を使用して直線セグメントP1(0、0)—P2(5、2)を描画します。5
d0 = 2a + b = 1 d1 = 2a = -4 d2 = 2(a + b)= 6
ここに画像の説明を挿入

アルゴリズム

void Midpoint Line (int x0,int y0,int x1, int y1,int color)
 {
  int a, b, d1, d2, d, x, y;
 a=y0-y1, b=x1-x0, d=2*a+b;
 d1=2*a, d2=2* (a+b);
    x=x0, y=y0;
    drawpixel(x, y, color);
    while (x<x1)
    { 
  if (d<0)       
  {
   x++, y++, d+=d2; 
  }
      else       
   {
    x++, d+=d1;
  }
      drawpixel (x, y, color);
    }  /* while */
 } /* mid PointLine */
元の記事を16件公開 いいね1 訪問数180

おすすめ

転載: blog.csdn.net/weixin_44931542/article/details/105110763