OpenGL 利用中點演算法畫y kx b直線

2021-07-10 18:46:35 字數 1464 閱讀 6386

本文直接用(0< k<1)來說明中點演算法畫直線。其他的斜率可直接按照此方法進行類推。

1。設乙個函式為f(x,y) = y - kx - b;

若f(x,y) > 0, 那麼該點在這條直線的上方

若f(x,y) = 0, 那麼該點在這條直線上

若f(x,y) <0, 那麼該點在這條直線下方

2。 因為k的範圍是 0 < k<1,那麼x平均每單位的增量是大於y的,所以以x為自增量來確定y的座標。意思是當前所選的畫素點為(xp,yp),那麼下個畫素點的可選擇範圍是(xp+1,yp)或者(xp+1,yp+1)。每個畫素點都比當前畫素點的x座標加一,y座標要麼保持不變,要麼加一。

3。設d = f(xp+1,yp+1/2),即以d的值來確定下個畫素點的y值。如上圖的midpoint,該點的橫座標是xp+1,縱座標是yp+1/2。將這個座標帶入f(x,y)函式中,若d>0,則說明該midpoint在這條直線的上方。那麼可以清晰的看到圖中,yp到理想值的距離是明顯小於yp+1到理想值的距離的。(理想值是當橫座標為xp+1,縱座標在直線上的那點),所以下一點的縱座標定為yp。同理可得,當d<0時,下一點的縱座標為yp+1;

4。計算d值。首先d0是很容易給出的。數學公式打不出來還是見草稿紙吧。

又到了開心的貼**時間啦…

// 所給**在vs2013版本下執行成功

// 支援給出直線的兩個座標,畫出該直線

#include //在win32控制台下執行所加的標頭檔案,貌似在vc下執行不需要加此標頭檔案

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

void init()

void setpixel(glint x, glint y)

void line()

else d -= k;

setpixel(x0, y0);

}glflush();

}void main(int argc, char ** argv)//main函式的基本程式 貌似是必須要寫的

opengl中點精靈的使用

本人的個人部落格首頁為 csdn部落格首頁為 現在假設在乙個opengl的場景中存在大量的點,在繪製中你可以使用glvertex3d函式,繪製出來後,如果點很小,你看到了是場景中大量的 點 如果用glpointsize使點變大,你看到的是場景中有大量的 方格 是的,opengl中的點,其實都是方格,...

openGL 中點Bresenham繪製直線演算法

macos xcode編譯器 include include include include include using namespace std float wid 400 設定視窗的大小,約定視窗必須為正方形 float height wid 設定視窗的大小 int numbers 20 設定...

24點演算法

include typedef float cdecl type myfun float float float funadd float x,float y float funsub float x,float y float funmul float x,float y float fundiv...