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

OpenGL通過(guò)中點(diǎn)法繪制直線和圓

 更新時(shí)間:2020年02月20日 08:56:22   作者:陳紋欽  
這篇文章主要為大家詳細(xì)介紹了OpenGL通過(guò)中點(diǎn)法繪制直線和圓,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了OpenGL繪制直線和圓的具體代碼,供大家參考,具體內(nèi)容如下

#include <gl/glut.h>
#include <math.h>
 
static int i=1;
 
void Initial(void)
{
 glClearColor(1.0f, 1.0f, 1.0f, 1.0f); //設(shè)置窗口背景顏色為白色
 glMatrixMode(GL_PROJECTION); //指定設(shè)置投影參數(shù)
 gluOrtho2D(-200.0,200.0,-200.0,200.0); //設(shè)置投影參數(shù) //指的是視圖范圍,如果(0,200,0,200)的話就只能在第一象限顯示,就1/4圓,第1,3的參數(shù)是左下角坐標(biāo),第2,4的參數(shù)是右上角坐標(biāo)
}
/*void Display(void)
{
 glClear(GL_COLOR_BUFFER_BIT); //用當(dāng)前背景色填充窗口
 glColor3f(1.0f, 0.0f, 0.0f);  //設(shè)置當(dāng)前的繪圖顏色為紅色
 glRectf(50.0f, 100.0f, 150.0f, 50.0f); //繪制一個(gè)矩形
  glFlush();    //處理所有的OpenGL程序
}
*/
 
void DDALine(int x0,int y0,int x1,int y1)
{
 //glVertex2f(10,10);
 int dx,dy,epsl,k;
 float x,y,xIncre,yIncre;
 dx = x1 - x0;
 dy = y1 - y0;
 x = x0;
 y = y0;
 
 if(abs(dx)>abs(dy))
 epsl=abs(dx);
 else
 epsl=abs(dy);
 
 xIncre=(float)dx/(float)epsl;
 yIncre=(float)dy/(float)epsl;
 glPointSize(2);
 glBegin(GL_POINTS);
 for(k = 0;k <= epsl; k++)
 {
 glColor3f(1.0f, 0.0f, 0.0f);
 glVertex2f(int(x+0.5),int(y+0.5));
 x += xIncre;
 y += yIncre;
 }
 glEnd();
 
}
 
 
 
void Mid_B(int x0,int y0,int x1,int y1)
{
 int dx,dy,d,UpIncre,DownIncre,x,y;
 if(x0 > x1)
 {
 x = x1;
 x1 = x0;
 x0 = x;
 y = y1;
 y1 = y0;
 y0 = y;
 }
 x = x0;
 y = y0;
 dx = x1 - x0;
 dy = y1 - y0;
 d = dx - 2*dy;
 UpIncre = 2*dx - 2*dy;
 DownIncre =- 2*dy;
 
 glPointSize(2);
 glBegin(GL_POINTS);
 while(x <= x1)
 {
 glColor3f(1.0f, 0.0f, 0.0f);
 glVertex2f(x,y);
 x++;
 if(d < 0)
 {
 y++;
 d += UpIncre;
 }
 else
 d += DownIncre;
 }
 glEnd();
 
}
 
void G_B(int x0,int y0,int x1,int y1)
{
 int x,y,dx,dy,e;
 dx = x1 - x0;
 dy = y1 - y0;
 e =- dx;
 x=x0;
 y=y0;
 
 glPointSize(2);
 glBegin(GL_POINTS);
 while(x <= x1)
 {
 glColor3f(1.0f, 0.0f, 0.0f);
 glVertex2f(x,y);
 x++;
 e = e + 2*dy;
 if(e > 0)
 {
 y++;
 e = e - 2*dx;
 }
 
 }
 glEnd();
}
 
void CirclePoint(int x, int y)
{
 glPointSize(2);
 glBegin(GL_POINTS);
 glColor3f(1.0f, 0.0f, 0.0f);
 glVertex2f(x,y);
 glVertex2f(y,x); 
 glVertex2f(-y,x); 
 glVertex2f(-x,y); 
 glVertex2f(-x,-y); 
 glVertex2f(-y,-x); 
 glVertex2f(y,-x); 
 glVertex2f(x,-y);
 glEnd();
}
 
void MidBresenhamCircle(int r)
{
 int x = 0, y = r, d = 1-r;
 //glPointSize(2);
 //glBegin(GL_POINTS);
 while(x <= y)
 {
 CirclePoint(x,y);
 
 if(d < 0)
 d += 2*x+3;
 else
 {
 d += 2*(x-y)+5;
 y--;
 }
 x++;
 }
 glEnd();
}
 
void ProcessMenu(int value)
{
 i = value; 
 glutPostRedisplay();
}
 
 
 
void Display(void)
{
 glClear(GL_COLOR_BUFFER_BIT); //用當(dāng)前背景色填充窗口
 glViewport(0,0,400,400); //前兩個(gè)參數(shù)改變?cè)c(diǎn)坐標(biāo),后兩個(gè)參數(shù)改變圖形長(zhǎng)寬(放大縮?。?
 switch(i)
 {
 case 1:
 DDALine(2,3,55,83);
 break;
 case 2:
 Mid_B(2,3,55,83);
 break;
 case 3:
 G_B(2,3,55,83);
 break;
 case 4:
 MidBresenhamCircle(50);
 break;
 
 }
 glFlush(); 
}
 
int main(int argc, char* argv[])
 
{
 glutInit(&argc, argv); //初始化GLUT庫(kù),處理命令行參數(shù) 
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); //初始化窗口的顯示模式
 glutInitWindowSize(400,400);  //設(shè)置窗口的尺寸
 glutInitWindowPosition(100,100); //設(shè)置窗口的位置
 glutCreateWindow("直線");   //創(chuàng)建一個(gè)名為矩形的窗口
 
 int MainMenu = glutCreateMenu(ProcessMenu); //創(chuàng)建主菜單
 glutAddMenuEntry("DDA算法",1);
 glutAddMenuEntry("中點(diǎn)Bresenham算法",2);
 glutAddMenuEntry("改進(jìn)的Bresenham算法",3);
 glutAddMenuEntry("中點(diǎn)bresenham畫圓",4);
 glutAttachMenu(GLUT_RIGHT_BUTTON); 
 
 glutDisplayFunc(Display); //設(shè)置當(dāng)前窗口的顯示回調(diào)函數(shù)
 Initial();     //完成窗口初始化
 glutMainLoop();   //啟動(dòng)主GLUT事件處理循環(huán)
 return 0;
 
 
}

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

相關(guān)文章

  • C語(yǔ)言 操作符#與##使用方法詳解

    C語(yǔ)言 操作符#與##使用方法詳解

    在類函數(shù)宏中(帶參數(shù)的宏),#號(hào)作為一個(gè)預(yù)處理運(yùn)算符,可以把記號(hào)轉(zhuǎn)換成字符串。##相當(dāng)于連接符,它會(huì)將兩邊的內(nèi)容連接起來(lái),形成新的標(biāo)識(shí)符,下面請(qǐng)看詳細(xì)的教程
    2022-04-04
  • C語(yǔ)言實(shí)現(xiàn)打印楊輝三角的方法詳細(xì)(三種方法)

    C語(yǔ)言實(shí)現(xiàn)打印楊輝三角的方法詳細(xì)(三種方法)

    楊輝三角是中國(guó)古代數(shù)學(xué)的杰出研究成果之一,它把二項(xiàng)式系數(shù)圖形化,把組合數(shù)內(nèi)在的一些代數(shù)性質(zhì)直觀地從圖形中體現(xiàn)出來(lái),是一種離散型的數(shù)與形的結(jié)合。本文將介紹三種可以實(shí)現(xiàn)打印楊輝三角的辦法,感興趣的可以試一試
    2022-01-01
  • 使用emacs編寫C語(yǔ)言教程

    使用emacs編寫C語(yǔ)言教程

    這篇文章主要介紹了使用emacs編寫C語(yǔ)言教程,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語(yǔ)言棧的表示與實(shí)現(xiàn)實(shí)例詳解

    C語(yǔ)言棧的表示與實(shí)現(xiàn)實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言棧的表示與實(shí)現(xiàn),對(duì)于數(shù)據(jù)結(jié)構(gòu)與算法的研究有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-07-07
  • 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
  • OpenCV實(shí)現(xiàn)相機(jī)標(biāo)定示例詳解

    OpenCV實(shí)現(xiàn)相機(jī)標(biāo)定示例詳解

    相機(jī)標(biāo)定是圖像處理的基礎(chǔ),現(xiàn)在市面上買到的相機(jī),都存在著或多或少的畸變。本文將介紹如何利用一系列棋盤照片進(jìn)行攝像機(jī)標(biāo)定的,感興趣的小伙伴可以關(guān)注一下
    2021-11-11
  • C語(yǔ)言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    C語(yǔ)言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言模擬實(shí)現(xiàn)簡(jiǎn)單掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Objective-C的內(nèi)省(Introspection)用法小結(jié)

    Objective-C的內(nèi)省(Introspection)用法小結(jié)

    這篇文章主要介紹了Objective-C的內(nèi)省(Introspection)用法,這是面向?qū)ο笳Z(yǔ)言和環(huán)境的一個(gè)強(qiáng)大特性,需要的朋友可以參考下
    2014-07-07
  • 深入分析Visual C++進(jìn)行串口通信編程的詳解

    深入分析Visual C++進(jìn)行串口通信編程的詳解

    本篇文章是對(duì)Visual C++進(jìn)行串口通信編程進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 淺析C++ 仿函數(shù)

    淺析C++ 仿函數(shù)

    這篇文章主要介紹了C++ 仿函數(shù)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論

华蓥市| 横峰县| 中江县| 五家渠市| 牙克石市| 邛崃市| 德安县| 宜城市| 海原县| 古交市| 鸡泽县| 灵石县| 湖北省| 丰都县| 南川市| 广东省| 化州市| 六枝特区| 府谷县| 玛沁县| 抚州市| 莱阳市| 富源县| 聂拉木县| 桂阳县| 兴安县| 呼玛县| 若羌县| 周至县| 尤溪县| 尉犁县| 兴隆县| 嘉祥县| 天门市| 沂南县| 曲阳县| 宝山区| 安阳市| 常熟市| 禄丰县| 巴马|