欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言使用Bresenham算法生成直線(easyx圖形庫)

 更新時間:2020年03月24日 10:55:56   作者:MMagicLoren  
這篇文章主要為大家詳細介紹了C語言使用Bresenham算法生成直線,基于easyx圖形庫,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

Bresenham算法是計算機圖形學領(lǐng)域使用最廣泛的直線掃描轉(zhuǎn)換方法。

其原理是:過各行、各列像素中心構(gòu)造一組虛擬網(wǎng)格線,按直線從起點到終點的順序計算直線各垂直網(wǎng)格線的交點,然后確定該列像素中與此交點最近的像素。

Bresenham算法也是一種計算機圖形學中常見的繪制直線的算法,其本質(zhì)思想也是步進的思想,但由于避免了浮點運算,相當于DDA算法的一種改進算法。

源代碼展示:

#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<conio.h>
#define x0 400    //定義全局變量x0,y0:坐標軸中心(x0,y0)
#define y0 300           
void Bresenham(int x1, int y1, int x2, int y2) 
{
 int x, y, dx, dy, p1, i;
 dx = x2 - x1;            
 dy = y2 - y1;
 if (abs(dx) > abs(dy)) //斜率絕對值在(0,1),步進方向為x軸
 {       
 if (x1 < x2)   //默認畫點從左往右畫
 {         
  x = x1;
  y = y1;
 }
 else
 {
  x = x2;
  y = y2;
 }    
 putpixel(x + x0, y0 - y, RED);
 Sleep(50);
 p1 = 2 * abs(dy) - abs(dx);     //計算初始pi的值
 for (i = min(x1, x2); i < max(x1, x2); i++) 
 {
  x = x + 1;
  if (p1 >= 0) 
  {
  if (dx*dy >= 0)
   y = y + 1;
  else
   y = y - 1;  //若Pi>=0,y(i+1)=y(i)±1
  p1 = p1 + 2 * (abs(dy) - abs(dx));  //更新pi
  }
  else 
  {
  y = y;     //若Pi<0,y(i+1)=y(i)
  p1 = p1 + 2 * abs(dy);   //更新pi
  }
  putpixel(x + x0, y0 - y, RED);
  Sleep(50);
 }
 }
 else 
 {
 if (y1 < y2) 
 {       //步進方向為y軸,默認畫點從下往上畫     
  x = x1;
  y = y1;
 }
 else 
 {
  x = x2;
  y = y2;
 }
 putpixel(x + x0, y0 - y, RED);
 Sleep(50);
 p1 = 2 * abs(dx) - abs(dy);
 for (i = min(y1, y2); i < max(y1, y2); i++) 
 {
  y = y + 1;
  if (p1 >= 0) 
  {
  if (dx*dy >= 0)   //判斷x方向是增加還是減少,很關(guān)鍵
   x = x + 1;
  else
   x = x - 1;
  p1 = p1 + 2 * (abs(dx) - abs(dy));
  }
  else 
  {
  x = x;
  p1 = p1 + 2 * abs(dx);
  }
  putpixel(x + x0, y0 - y, RED);
  Sleep(50);
 }
 }
}
void main() 
{
 int x1, x2, y1, y2;
 printf("請輸入兩個整數(shù)點的坐標(x1,y1),(x2,y2)\n");
 scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
 initgraph(800, 600);  //初始化圖形窗口大小
 setbkcolor(WHITE);
 cleardevice();
 setcolor(BLACK);
 line(0, y0, x0 * 2, y0); //坐標軸X
 line(x0, 0, x0, y0 * 2); //坐標軸Y
 Bresenham(x1, y1, x2, y2);      //Bresenham畫線算法
 _getch();     //等待一個任意輸入結(jié)束
 closegraph();     //關(guān)閉圖形窗口
}

結(jié)果顯示:

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • QT樹的具體項目實現(xiàn)

    QT樹的具體項目實現(xiàn)

    本文主要介紹了QT樹的具體項目實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • C++中std的使用及說明

    C++中std的使用及說明

    這篇文章主要介紹了C++中std的使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 用C++實現(xiàn)隊列的程序代碼

    用C++實現(xiàn)隊列的程序代碼

    本篇文章是對使用C++實現(xiàn)隊列的程序代碼進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言基礎(chǔ)全局變量與局部變量教程詳解

    C語言基礎(chǔ)全局變量與局部變量教程詳解

    此處對于全局與局部做一些簡要的介紹,包括全局變量與局部變量,靜態(tài)全局變量與靜態(tài)局部變量,全局函數(shù)與靜態(tài)函數(shù),作者實屬初學,文中若有理解不當之處,還請朋友們不吝指正
    2021-11-11
  • C/C++中g(shù)etline函數(shù)案例總結(jié)

    C/C++中g(shù)etline函數(shù)案例總結(jié)

    這篇文章主要介紹了C/C++中g(shù)etline函數(shù)案例總結(jié),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C語言中for循環(huán)問題(一個小坑需注意)

    C語言中for循環(huán)問題(一個小坑需注意)

    這篇文章主要給大家介紹了關(guān)于C語言中for循環(huán)問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C 讀取ini文件的實例詳解

    C 讀取ini文件的實例詳解

    這篇文章主要介紹了C 讀取ini文件的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • 基于C語言實現(xiàn)2048游戲

    基于C語言實現(xiàn)2048游戲

    這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)2048游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 一文讀懂C++ 虛函數(shù) virtual

    一文讀懂C++ 虛函數(shù) virtual

    這篇文章主要介紹了C++ 虛函數(shù) virtual的相關(guān)資料,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • C語言基礎(chǔ)野指針與空指針示例分析

    C語言基礎(chǔ)野指針與空指針示例分析

    全網(wǎng)最接地氣的C語言野指針介紹,此處對于野指針與空指針知識點做一些簡要的介紹,作者實屬初學,難免文章中有內(nèi)容理解不到位或者有不當之處,還請朋友們不吝指正,希望大家多多給予支持
    2021-11-11

最新評論