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)+1-( y(k+1)-b )/m;
p(k)=dx*(d(low)-d(upper))=2*dx*(y(k)+1-b)-2*dy*x(k)-dx;
可以推出
p(k+1)=p(k)+2*dx-2*dy(x(k+1)-x(k));
其中x(k+1)-x(k)的值取決於p(k)的符號
將直線方程式和斜率m=dy/dx帶入p(k)的表示式可以得出
p(0)=dy,由此可以寫出斜率大於1時的實現,
同理可以按此方法得出斜率在(-1,0)和斜率小於-1時的情況,或者可以根據對稱性得出
相關推薦
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)+
直線生成演算法的實現:分別利用DDA演算法、中點Bresenham演算法和改進的Bresenham演算法掃描轉換直線段P1P2
直線生成演算法的實現:分別利用DDA演算法、中點Bresenham演算法和改進的Bresenham演算法掃描轉換直線段P1P2,其中P1為(0, 0), P2為(8, 6)。 // fhk.cpp : 定義控制檯應用程式的入口點。 // #include <iost
實驗一 繪制任意斜率的直線段 | 使用VS2017工具
範圍 flag bresenham 註定 mouse wid cpp none 移動 這世界上有很多坑,註定有些坑是要填的。下面我就用VS2017使用MFC對這個課堂實驗進行填坑。 一、實驗目的 (1)掌握任意斜率直線段的重點 Bresenham 掃描轉換算法; (2
Matlab任意兩點之間繪製帶箭頭的直線
工作環境(藍色粗體字為特別注意內容) 1,開發環境:Matlab 2012b win32 2,程式語言:Matlab 最近需要使用matlab繪製帶箭頭的直線,發現如下方式可以繪製帶箭頭的直線 1.呼叫annotation函式繪製二維箭頭annotation函式用來在當前圖形視窗建立
計算機圖形學實驗(二)—— 直線Bresenham演算法原始碼
1. Bresenham演算法核心:(詳細原理見末尾) 理解光柵化:畫素點只能是整數點。 藉助決策變數 的正負號判斷下一個點座標,從而避免了計算直線斜率所用乘除法,只需要用加減法。 預設斜率絕對值在區間(0,1)時,即abs(dx)>abs(dy),步進方
計算機圖形常用演算法實現1 DDA,中點畫線法,bresenham演算法
打算手動實現圖形學中的絕大部分演算法。 執行環境winform+c# (程式碼是通用的,如果在其他地方畫圖,只需要替換掉畫點的函式即可) 我們的函式預設是按x座標順序遞增傳入的,因此在呼叫下面函式之前,需要保證p1.x<p2.x(可以減少討論數量) Point pp =
實驗2 直線生成演算法實現
#include<Gl/glut.h> void LineDDA(int x0, int y0, int x1, int y1 /* int color*/){ int x, dy, dx, y; float m; dx = x1 - x
三維空間兩條直線的最短距離、最近點及C++演算法實現
未經許可請勿轉載 在雙目視覺立體空間重建中,會根據兩個相機中的物體影象座標,求取給定三維座標系的三維座標,而可以根據物體 影象座標、相機內參、給定座標系的相機外參,求取相機光軸線的方程,從而實現立體重建,內外參、直線方程請執行 搜尋學習,本文主要是解決在已知空間兩直線求最短
自己動手實現光柵化直線生成演算法
前期準備:搭建可以在螢幕上畫一個畫素的開發環境,我使用OpenGL的glfw庫來畫點。 為了提高畫線演算法的可讀性,我先把自己使用的畫點函式寫出來 //點 繪製 /* point2D是一個包含x,y座標位置的物件 R,G,B - color pointSize是畫素點的大
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 計算機圖形學課程簡介 《計算機圖形學》是計算機、地理資訊系統、應用數學、機械、建築等專業本科教學中的一門重要的專業基礎課 如影
從零開始寫光柵化渲染器2:直線繪製光柵化演算法
直線繪製光柵化演算法 1.數值微分DDA(Digital Differential Analyzer)演算法 1.1原理 引入增量思想,以dx≥dy(斜率[0,1])為例,考慮直線y=kx+b,當x步進為1時,y步進為k,即yi+1=yi+k,根據
生成直線的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演算法、
利用C++ string實現任意長度小數、整數之間的加法
code include spa ctype empty esp pac space temp 1 /* 2 大數的運算1--加法: 3 利用C++ string實現任意長度小數、整數之間的加法 4 作者:大大維 5 2017/5/5
以均勻隨機分布生成任意斜率隨機線性分布
amp namespace 函數 exit rand() 歸一化 while end 並且 本文的目的是利用(0,1)上的均勻分布隨機數生成器生成區間為(imin,imax),斜率為slope的任意歸一化線性隨機數生成器。 借助(0,1)上的均勻隨機數生成器,可以通過反函
K1 K2作為中斷源控制紅色LED燈,實現任意鍵按一下LED燈亮或者滅
指向 很多 pan ports type bsp cnblogs rip handler 1 #include "stm32f10x.h" // 相當於51單片機中的 #include <reg51.h> 2 #include "stm32f10
多媒體技術 || 用中位切割演算法實現影象減色
實現環境:python 處理一張紅蘋果圖: 先描述一下中位切割演算法吧: 將圖片內的所有畫素加入到同一個區域 對於所有的區域做以下的事: 計算此區域內所有畫素的 RGB 三元素最大值與最小值的差。 選出相差最大的那個顏色(R 或 G 或 B)
【Python】曲線簡化演算法實現
Overview 曲線簡化演算法通常應用於運動捕捉資料的關鍵幀提取,在此基礎上還演化出了更多的演算法 本文對基本的曲線簡化演算法進行了程式碼實現,以關鍵幀個數或線性重建誤差作為迭代終止條件 其中,計算點i到直線n1-n2的距離公式如下[1]: 更多演算法及分析可參考[2]
一列數字的規則如下;1,1,2,3,5,8,13,21,34........ 求第30位數字是多少,用遞規和非遞迴兩種方法演算法實現
斐波納契數列(Fibonacci Sequence),又稱黃金分割數列。在數學上,斐波納契數列以如下被以遞迴的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,現在我從演算法的角度,利用遞迴和非