91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-12 20:13:20 來源:腳本之家 閱讀:155 作者:MMagicLoren 欄目:編程語言

Bresenham算法是計算機圖形學領域使用最廣泛的直線掃描轉換方法。

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

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

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

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

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

源代碼展示:

#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方向是增加還是減少,很關鍵
   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("請輸入兩個整數點的坐標(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();     //等待一個任意輸入結束
 closegraph();     //關閉圖形窗口
}

結果顯示:

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

开鲁县| 钟山县| 茶陵县| 邢台县| 阿瓦提县| 伊宁市| 盐边县| 大邑县| 抚远县| 金沙县| 中牟县| 哈密市| 蓝山县| 尼勒克县| 常熟市| 双流县| 长武县| 寿阳县| 黄浦区| 衡东县| 丹江口市| 蕲春县| 岳阳市| 内黄县| 大渡口区| 达孜县| 始兴县| 嘉禾县| 姜堰市| 余姚市| 石景山区| 深水埗区| 威宁| 万载县| 曲周县| 吴旗县| 广州市| 阜平县| 开平市| 花莲县| 大丰市|