学習コンピュータグラフィックス()ストレートと中間点のアルゴリズムMathWorks社のMATLABの実装を説明


中点アルゴリズムの原則

  • 勾配を間隔(0,1)に設けられている最も簡単な場合についての話は、他の場合も同様に導くことができます。
  • 現在の画素P(XためP、Y P)、次の画素Pのための2つのオプションがある。1又はP 2、P 1、P 2の中点M(X P + 1、Y P +0.5)、QはX = Xで描かれた直線P +は、図に示すように、交差点を+1しました。
    ここに画像を挿入説明
  • MがQ上で、次の画素P1を取る場合、M P2は、テイクQ未満であります

中点アルゴリズム

  • そうライン始点と終点を描く必要、それぞれ(X 1、Y 1)、(X 2、Y 2後)、線形方程式F(X、Y)= AX +によって+ C = 0、 点は、線形方程式の単純化に置換されています利用可能なA / B = -k(傾きk)は、Y = Aであるように。1 -Y 2、X B = 2 -X- 。1 X = C、(-k業者限りすることができる)。1 Y 2 -X- 2 Y- 1

  • 次のようにポイントと直線的な関係を得ることができます。

    • 直線F(X、Y)= 0、
    • 直線上記F(X、Y)> 0、
    • F直線以下の(x、y)<0、
  • 中間点M(X P + 1、Y。P +0.5)は線形方程式に代入する:D = F(X 、P + 1、Y。P +0.5)= A(X P + +1)+ B(Y P +0.5)+ C、Dの値に基づいて次の画素を決定します。

    • P取ら直線M上記D <0、2次の画素について
    • D> 0、M以下直線は、撮影したP 1次の画素のために
    • D = 0、Pから選択される2、P 1は、ここでPを取り出すことができる。1
  • 現在の画素点P(X場合P、Y P)、我々は、D> = 0およびd <0 2例を考えてみます。

    • D <0、この点P 1次の画素について、次の画素は:D 1 = F(X 、P + 2、Y P +1.5)= A(X P +2)+ B(Y P + 1.5)+ C = [A(X P + +1)+(Y P +0.5)+ C] + A + B = A + B + D

      このとき、D 1 = D + + bの、+ bの増分

    • D> = 0、この点P 2次の画素について、次の画素がある:D 2 = F(X 、P + 2、Y P +0.5)= A(X P +2)+ B(Y P +0.5)+ C = [A(X P + +1)+(Y P +0.5)+ C] + A = A + D

      この時、D 2 = D +、インクリメントA

  • D最初の画素値(X 1、Y 1)Dに対応する0、D 0 = F(X 1 + 1、Y 0 +0.5)= A(X 0 + +1)+ B(Y 0 +0.5)+ C = AX 0 +によって0 + A + C + F. 0.5B =(X 0、Y 0)+ A + 0.5B、F(Xなぜなら0、Y 0)= 0、そうDその0 = A + 0.5B

    アカウントにインクリメントDを取る正の数、代わりにDと2Dは、浮動小数点演算を取り除くされ、2〜D1(+ b)は、図2AにD2


MathWorks社のMATLABコードの実装

function midpoint(x1,y1,x2,y2,color)

a = (y1-y2);
b = (x2-x1);

d=2*a+b;
d1=2*a;
d2=2*(a+b);

x=x1;
y=y1;
hold on
grid minor
scatter(x,y,'.',color)
for i=x:x2
    if d<0
        x=x+1;
        y=y+1;
        d=d+d2;
    else
         x=x+1;
         d=d+d1;
    end
    scatter(x,y,'.',color)
end
hold off

表示結果

(点0と1の間の傾きから選択注)機能中点を呼び出す前

midpoint(200,600,500,750,'red')

ここに画像を挿入説明

拡大観察した後、

ここに画像を挿入説明

公開された85元の記事 ウォンの賞賛158 ・は 60000 +を見て

おすすめ

転載: blog.csdn.net/Late_whale/article/details/105051740