最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

Bresenham算法也是一種計(jì)算機(jī)圖形學(xué)中常見的繪制直線的算法,其本質(zhì)思想也是步進(jìn)的思想,但由于避免了浮點(diǎn)運(yùn)算,相當(dāng)于DDA算法的一種改進(jìn)算法。

源代碼展示:

#include<stdio.h>
#include<graphics.h>
#include<math.h>
#include<conio.h>
#define x0 400    //定義全局變量x0,y0:坐標(biāo)軸中心(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)) //斜率絕對(duì)值在(0,1),步進(jìn)方向?yàn)閤軸
 {       
 if (x1 < x2)   //默認(rèn)畫點(diǎn)從左往右畫
 {         
  x = x1;
  y = y1;
 }
 else
 {
  x = x2;
  y = y2;
 }    
 putpixel(x + x0, y0 - y, RED);
 Sleep(50);
 p1 = 2 * abs(dy) - abs(dx);     //計(jì)算初始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) 
 {       //步進(jìn)方向?yàn)閥軸,默認(rèn)畫點(diǎn)從下往上畫     
  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("請(qǐng)輸入兩個(gè)整數(shù)點(diǎn)的坐標(biāo)(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); //坐標(biāo)軸X
 line(x0, 0, x0, y0 * 2); //坐標(biāo)軸Y
 Bresenham(x1, y1, x2, y2);      //Bresenham畫線算法
 _getch();     //等待一個(gè)任意輸入結(jié)束
 closegraph();     //關(guān)閉圖形窗口
}

結(jié)果顯示:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++?STL?iota?和?atoi?用法示例詳解

    C++?STL?iota?和?atoi?用法示例詳解

    atoi是一個(gè)C/C++標(biāo)準(zhǔn)庫(kù)中的函數(shù),用于將一個(gè)以ASCII字符串表示的整數(shù)轉(zhuǎn)換為整數(shù)類型,這篇文章主要介紹了C++?STL?iota?和?atoi?用法,需要的朋友可以參考下
    2024-08-08
  • C++排序算法之插入排序解析

    C++排序算法之插入排序解析

    這篇文章主要介紹了C++排序算法之插入排序解析,將數(shù)組分為有序表和無(wú)序表,每次從有序表中取出一個(gè)元素,插入到有序表的適當(dāng)位置,每遍歷一次,有序表中元素增加一個(gè),無(wú)序表中元素個(gè)數(shù)減少一個(gè),重復(fù)n-1次,完成排序,需要的朋友可以參考下
    2023-10-10
  • C語(yǔ)言實(shí)現(xiàn)進(jìn)程間通信原理解析

    C語(yǔ)言實(shí)現(xiàn)進(jìn)程間通信原理解析

    這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)進(jìn)程間通信原理解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 一個(gè)string類的簡(jiǎn)單實(shí)現(xiàn)案例

    一個(gè)string類的簡(jiǎn)單實(shí)現(xiàn)案例

    下面小編就為大家?guī)硪黄粋€(gè)string類的簡(jiǎn)單實(shí)現(xiàn)案例。小編覺得挺不錯(cuò)的現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • C 程序?qū)崿F(xiàn)密碼隱秘輸入的實(shí)例 linux系統(tǒng)可執(zhí)行

    C 程序?qū)崿F(xiàn)密碼隱秘輸入的實(shí)例 linux系統(tǒng)可執(zhí)行

    下面小編就為大家?guī)硪黄狢 程序?qū)崿F(xiàn)密碼隱秘輸入的實(shí)例 linux系統(tǒng)可執(zhí)行。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Visual?Studio?2019?Qt?QML?項(xiàng)目環(huán)境搭建常見問題處理

    Visual?Studio?2019?Qt?QML?項(xiàng)目環(huán)境搭建常見問題處理

    本文主要介紹了Visual?Studio?2019?Qt?QML?項(xiàng)目環(huán)境搭建常見問題處理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • C++中sprintf使用的方法與printf的區(qū)別分析

    C++中sprintf使用的方法與printf的區(qū)別分析

    這篇文章主要介紹了C++中sprintf使用的方法與printf的區(qū)別,實(shí)例分析了sprintf與printf的具體用法及相關(guān)注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • C++11 上下文關(guān)鍵字的具體實(shí)踐

    C++11 上下文關(guān)鍵字的具體實(shí)踐

    本文主要介紹了C++11 上下文關(guān)鍵字的具體實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • C++實(shí)現(xiàn)訪問者模式的基礎(chǔ)介紹

    C++實(shí)現(xiàn)訪問者模式的基礎(chǔ)介紹

    訪問者模式表示一個(gè)作用于某對(duì)象結(jié)構(gòu)中各元素的操作,它使我們可以在不改變各元素的類的前提下定義作用于這些元素的新操作。對(duì)C++訪問者模式相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-09-09
  • C/C++實(shí)現(xiàn)數(shù)字與字符串互相轉(zhuǎn)換的多種方法

    C/C++實(shí)現(xiàn)數(shù)字與字符串互相轉(zhuǎn)換的多種方法

    在C/C++程序中,會(huì)需要把數(shù)字與字符串做出互相轉(zhuǎn)換的操作,用于實(shí)現(xiàn)程序想要的效果,下面將介紹多種方法實(shí)現(xiàn)數(shù)字與字符串互相轉(zhuǎn)換,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

龙井市| 汾阳市| 鄂托克前旗| 阳新县| 黄山市| 宁陵县| 南京市| 镇原县| 克东县| 比如县| 大石桥市| 容城县| 永昌县| 和林格尔县| 乌拉特前旗| 泾阳县| 永和县| 宁远县| 梅州市| 炉霍县| 会宁县| 凤城市| 通辽市| 离岛区| 河西区| 成安县| 双柏县| 固原市| 武定县| 双牌县| 澳门| 海阳市| 绥宁县| 西城区| 汨罗市| 扶风县| 普定县| 广灵县| 桑植县| 周至县| 屯门区|