Bresenham直線演算法
該演算法是圖形學中繪製直線的一種經典演算法。
給定的條件:座標,試光柵化線段。
並且假定:
推導過程:
1、列出直線方程:(使用兩點式)
得到了我們需要的直線方程形式:
並且該方程滿足:
2、Bresenham的核心思想:已知當前點座標(x,y),因為直線的斜率已經規定了是小於等於1的,所以下一個點的座標只可能是(x+1,y)或者(x+1,y+1)。那麼我只需要判斷(x+1,y+1/2)(中點)在直線的上方還是下方就可以了。
如果F(中點)<0,則中點在直線上方,那麼下一個點應該取(x+1,y);
如果F(中點)>0,則中點在直線下方,那麼下一個點應該取(x+1,y+1);
3、對於步驟2中下一個點的座標只可能是(x+1,y)或者(x+1,y+1)的情況,我們可以寫成(x,y)+(1,0)或者(x,y)+(1,1)。記:
4、然後根據Bresenham的思想,就很容易做下去了。我們以下圖為例:
計算過程如下:
這樣就能進一步簡化計算。
實際計算步驟:
如上圖中例圖所示。
相關推薦
Bresenham直線演算法
該演算法是圖形學中繪製直線的一種經典演算法。 給定的條件:座標,試光柵化線段。 並且假定: 推導過程: 1、列出直線方程:(使用兩點式) 得到了我們需要的直線方程形式: 並且該方程滿足: 2
Bresenham快速畫直線演算法
現在的計算機的影象的都是用畫素表示的,無論是點、直線、圓或其他圖形最終都會以點的形式顯示。人們看到螢幕的直線只不過是模擬出來的,人眼不能分辨出來而已。那麼計算機是如何畫直線的呢,其實有比較多的演算法,這裡講的是Bresenham的演算法,是光柵化的畫直線演算法。直線光柵化
Bresenham 畫直線演算法
Bresenham's畫線演算法作圖如下: 給定兩個點起點P1(x1, y1), P2(x2, y2),如何畫它們直連的直線呢,即是如何得到上圖所示的藍色的點。假設直線的斜率0<k>
圖形演算法:直線演算法
圖形演算法:直線演算法 標籤(空格分隔): 演算法 版本:3 作者:陳小默 宣告:禁止商用,禁止轉載 1 2 3 釋出於:作業部落、CSDN部落格 場景中的直線由其兩端點的座標位置來定義。要在光柵監視器中顯示一條線段,圖形系統必須先將兩端點投影到整數螢幕座標,並確定離兩端點間的直線路徑最近的
Mac下OpenGL實現直線演算法-OpenGL教程(2)
前言 這個學期有選了計算機圖形學這門課程。第一週上課老師的作業便是用OpenGL實現直線,那我就寫一篇詳細教程吧! // // main.cpp // opengl_helloword
計算機圖形學實驗(二)—— 直線Bresenham演算法原始碼
1. Bresenham演算法核心:(詳細原理見末尾) 理解光柵化:畫素點只能是整數點。 藉助決策變數 的正負號判斷下一個點座標,從而避免了計算直線斜率所用乘除法,只需要用加減法。 預設斜率絕對值在區間(0,1)時,即abs(dx)>abs(dy),步進方
直線生成演算法的實現:分別利用DDA演算法、中點Bresenham演算法和改進的Bresenham演算法掃描轉換直線段P1P2
直線生成演算法的實現:分別利用DDA演算法、中點Bresenham演算法和改進的Bresenham演算法掃描轉換直線段P1P2,其中P1為(0, 0), P2為(8, 6)。 // fhk.cpp : 定義控制檯應用程式的入口點。 // #include <iost
Bresenham演算法畫直線
void Bresenham_line(CDC *pDC, int x0, int y0, int x1, int y1, long color) { int dx = abs(x1
計算機圖形學 學習筆記(一):概述,直線掃描轉換演算法:DDA,中點畫線演算法,Bresenham演算法
前言 感謝中國農大 趙明老師的分享~ 現在我要為我自己走向遊戲程式設計打下基石~ 1 計算機圖形學概論 1.1 計算機圖形學課程簡介 《計算機圖形學》是計算機、地理資訊系統、應用數學、機械、建築等專業本科教學中的一門重要的專業基礎課 如影
生成直線的Bresenham演算法
由於顯示直線的象素點只能取整數值座標,可以假設直線上第i個象素點座標為(xi,yi),它是直線上點(xi,yi)的最佳近似,並且xi=xi(假設m<1),如下圖所示。那麼,直線上下一個象素點的可能位置是(xi+1,yi)或(xi+1,yi+1)。 由圖中可以知道,在x=xi+1處,直線上點
openGL一之直線DDA,正負法,Bresenham演算法,圓弧正負法,Bresenham演算法
實驗目的: 1. 掌握OpenGL環境的配置方法。 2. 熟悉OpenGL應用程式基礎架構。 3. 熟練掌握簡單OpenGL應用程式的建立、除錯與執行。 4. 培養良好的程式設計習慣和風格,並且學習撰寫實驗報告。 實驗步驟與內容: 1. 實現直線的DDA演算法、
Bresenham演算法實現任意斜率直線繪製
參考《計算機圖形學》 Donald.Hearn 書中給出了斜率k在0-1之間的推導過程 在k>=1時以y方向為單位步長遞增,此時有x=(y-b)/b; d(low)=x-x(k)=( y(k+1)-b )/m-x(k); d(upper)=x(k+1)-x=x(k)+
[AlgorithmStaff] Bresenham快速直線算法
urn info csdn 設計 csharp hand 官方 ima mat 操作系統:Windows8.1 顯卡:Nivida GTX965M 開發工具:Unity2017.3 | NativeC 最近在學習 Unity tilemap Brush 自定義筆刷功能時候
Liang-Barsky直線段裁剪演算法
引數化演算法(Cyrus-Beck) 考慮凸多邊形區域R和直線段P1P2:P(t)=(P2-P1)*t+P1 設A是區域R的邊界上一點,N是區域邊界在A點的內法線向量 則對於線段P1P2上任一點P(t) N ·(P(t)-A)< 0 →
中點分割直線段裁剪演算法
中點分割演算法原理 中點分割直線段裁剪演算法對Cohen-Sutherland直線裁剪演算法的第3種情況做了改進,原理是簡單地把起點為P0,終點為P1的直線段等分為兩段直線P0P和PP1(P為直線段中點),對每一段直線重複“簡取”和“簡棄”的處理,對於不能處理的直線段再繼續等分下去線
Cohen-Sutherland直線裁剪演算法
在二維觀察中,需要在觀察座標系下根據視窗大小對二維圖形進行裁剪(clipping),只將位於視窗內的圖形變換到視區輸出。直線段裁剪是二維圖形裁剪的基礎,裁剪的實質是判斷直線段是否與視窗相交,如相交則進一步確定直線段上位於視窗內的部分。 編碼原理 Cohen-Sutherland直
查詢表類演算法//直線上最多的點數
給定一個二維平面,平面上有 n 個點,求最多有多少個點在同一條直線上。 示例 1: 輸入: [[1,1],[2,2],[3,3]] 輸出: 3 解釋: ^ | | o | o |  
計算機圖形學實驗(一)--直線DDA演算法的實現
1. DDA演算法(數值微分法)原理: 1)網上或者計算機圖形學書本上有詳細介紹。 2)最核心的是選定(x2-x1)和(y2-y1)中較大者為步進方向。 2. 實現工具: 1) VS2017(C++)
計算機圖形學基礎-直線掃描轉化演算法
前言: 在數學上,直線上的點有無窮多個。擔當在計算機光柵顯示器螢幕上表示這條直線時需要做一些處理。 為了在光柵顯示器上用這些離散的畫素點逼近這條直線,需要知道這些畫素點的x,y座標。 求出過p0,p1的直線段方程:y=kx+b; k=(y1-y0)/(x1-x0)(x1 ≠ x0)