サーチ…


前書き

線画は、2つの指定された端点位置の間の線経路に沿って中間位置を計算することによって達成される。出力デバイスは、エンドポイント間のこれらの位置を埋めるように指示される。

Bresenham線描画アルゴリズム

背景理論:Bresenhamの線描画アルゴリズムは、Bresenhamによって開発された効率的かつ正確なラスター線生成アルゴリズムです。それは正確で高速なので、整数計算だけを含みます。また、別の曲線を円で表示するように拡張することもできます。

Bresenham線描画アルゴリズムでは:

スロープ| m | <1:
いずれかのxの値が大きくなる
または、xとyの両方が決定パラメータを使用して増加します。

スロープについて| m |> 1:
いずれかのyの値が増加する
または、xとyの両方が決定パラメータを使用して増加します。

勾配のアルゴリズム| m | <1:

  1. ラインの2つの端点(x1、y1)と(x2、y2)を入力します。

  2. 最初の点(x1、y1)をプロットします。

  3. 計算する
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |

  4. 初期決定パラメータを次のように取得します。
    P = 2 * dely - delx

  5. 1のステップでI = 0〜delxの場合

    p <0の場合
    X1 = x1 + 1
    ポット(x1、y1)
    P = p + 2 dely

    その他
    X1 = x1 + 1
    Y1 = y1 + 1
    プロット(x1、y1)
    P = p + 2
    dely - 2 * delx

    終了するif

    終了

  6. 終わり

ソースコード:

/* A C program to implement Bresenham line drawing algorithm for |m|<1 */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>

int main()
{    
 int gdriver=DETECT,gmode;
 int x1,y1,x2,y2,delx,dely,p,i;
 initgraph(&gdriver,&gmode,"c:\\TC\\BGI");

printf("Enter the intial points: ");
scanf("%d",&x1);
scanf("%d",&y1);
printf("Enter the end points: ");
scanf("%d",&x2);
scanf("%d",&y2);

putpixel(x1,y1,RED);

delx=fabs(x2-x1);
dely=fabs(y2-y1);
p=(2*dely)-delx;
for(i=0;i<delx;i++){
if(p<0)
{
 x1=x1+1;
 putpixel(x1,y1,RED);
 p=p+(2*dely);
}
else
{
 x1=x1+1;
 y1=y1+1;
 putpixel(x1,y1,RED);
 p=p+(2*dely)-(2*delx);
}
}
 getch();
 closegraph();
 return 0;
}

勾配のアルゴリズム| m |> 1:

  1. ラインの2つの端点(x1、y1)と(x2、y2)を入力します。
  2. 最初の点(x1、y1)をプロットします。
  3. 計算する
    Delx = | x2 - x1 |
    Dely = | y2 - y1 |
  4. 初期決定パラメータを次のように取得します。
    P = 2 * delx - dely
  5. I = 0〜1のステップでdely

    p <0の場合
    y1 = y1 + 1
    ポット(x1、y1)
    P = p + 2δx

    その他
    X1 = x1 + 1
    Y1 = y1 + 1
    プロット(x1、y1)
    P = p + 2
    delx - 2 * dely

    終了するif

    終了

  6. 終わり

ソースコード:

/* A C program to implement Bresenham line drawing algorithm for |m|>1 */
#include<stdio.h>
#include<conio.h>
#include<graphics.h>
#include<math.h>
int main()
{
int gdriver=DETECT,gmode;
int x1,y1,x2,y2,delx,dely,p,i;
initgraph(&gdriver,&gmode,"c:\\TC\\BGI");
printf("Enter the intial points: ");
scanf("%d",&x1);
scanf("%d",&y1);
printf("Enter the end points: ");
scanf("%d",&x2);
scanf("%d",&y2);
putpixel(x1,y1,RED);
delx=fabs(x2-x1);
dely=fabs(y2-y1);
p=(2*delx)-dely;
for(i=0;i<delx;i++){
if(p<0)
{
y1=y1+1;
putpixel(x1,y1,RED);
p=p+(2*delx);
}
else
{
x1=x1+1;
y1=y1+1;
putpixel(x1,y1,RED);
p=p+(2*delx)-(2*dely);
}
}
getch();
closegraph();
 return 0;
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow