【正文】
Sub 8. 橢圓填充 Private Sub Command1_Click() Dim circleX As Double, circleY As Double circleX = circleY = a = b = Dim X As Integer, Y As Integer Dim d1 As Double, d2 As Double X = 0 Y = b d1 = b * b + a * a * (b + ) (X + circleX, Y + circleY), RGB(, , ) (X + circleX, Y + circleY), RGB(, , ) (X + circleX, Y + circleY), RGB(, , ) (X + circleX, Y + circleY), RGB(, , ) Do While (b * b * (X + 1) a * a * (Y )) If (d1 = 0) Then d1 = d1 + b * b * (2 * X + 3) X = X + 1 Else d1 = d1 + b * b * (2 * X + 3) + a * a * (2 * Y + 2) X = X + 1 Y = Y 1 End If (X + circleX, Y + circleY), RGB(, , ) (X + circleX, Y + circleY), RGB(, , ) (X + circleX, Y + circleY), RGB(, , ) (X + circleX, Y + circleY), RGB(, , ) Loop d2 = b * b * (X + ) * (X + ) + a * a * (Y 1) * (Y 1) a * a 武漢理工大學《計算機圖形學基礎(chǔ)》課程論文 21 * b * b Do While (Y 0) If (d2 = 0) Then d2 = d2 + b * b * (2 * X + 2) + a * a * (2 * Y + 3) X = X + 1 Y = Y 1 Else d2 = d2 + a * a * (2 * Y + 3) Y = Y 1 End If (X + circleX, Y + circleY), RGB(, , ) (X + circleX, Y + circleY), RGB(, , ) (X + circleX, Y + circleY), RGB(, , ) (X + circleX, Y + circleY), RGB(, , ) Loop Dim maxY As Integer, minY As Integer, Xl As Integer, Xr As Integer, e maxY = CLng(circleY + b) minY = CLng(circleY b) For Y = minY To maxY e = Sqr(a * a (Y circleY) * (Y circleY) * a * a / (b * b)) Xl = CLng(circleX e) Xr = CLng(circleX + e) For X = Xl To Xr (X, Y), RGB(, , ) Next X Next Y End Sub Private Sub Command2_Click() End Sub 五.遇到的問題及解決辦法 : 一開始坐標軸的最大正坐標取的太小了,導(dǎo)致繪制的圖形完全不能顯示,調(diào)整之后就能顯示了。 3. Private Sub Picture1_MouseMove 實現(xiàn)獲取 鼠標當前坐標的功能。2排序 For k = 0 To n For m = 0 To n k 1 If jx(m) jx(m + 1) Then j = jx(m) jx(m) = jx(m + 1) jx(m + 1) = j End If Next m Next k 39。 四.源程序及相應(yīng)說明 Dim lineX(1000) As Double, lineY(1000) As Double, n As Integer, m As Integer, mousedrow As Integer Public CR As Integer, CG As Integer, CB As Integer Private Sub inputline_Click() End Sub Private Sub circle_Click() End Sub Private Sub ellipse_Click() End Sub 武漢理工大學《計算機圖形學基礎(chǔ)》課程論文 7 Private Sub circlefull_Click() End Sub Private Sub ellipsefull_Click() End Sub Private Sub about_Click() End Sub Private Sub exit_Click() End End Sub Private Sub mouseline_Click() mousedrow = 2 n = 0 End Sub Private Sub polygonstart_Click() mousedrow = 1 n = 0 End Sub Private Sub polygonend_Click() For m = 1 To n 1 Dim dx, dy, epsl, k, Xe As Double, Ye As Double, xIncre As Double, yIncre As Double dx = lineX(m) lineX(m 1) dy = lineY(m) lineY(m 1) Xe = lineX(m 1) Ye = lineY(m 1) If (Abs(dx) Abs(dy)) Then epsl = Abs(dx) Else: epsl = Abs(dy) xIncre = dx / epsl yIncre = dy / epsl For k = 0 To epsl (CLng(Xe), CLng(Ye)), RGB(HScroll1(0).Value, HScroll1(1).Value, HScroll1(2).Value) Xe = Xe + xIncre Ye = Ye + yIncre Next k 武漢理工大學《計算機圖形學基礎(chǔ)》課程論文 8 Next m dx = lineX(n 1) lineX(0) dy = lineY(n 1) lineY(0) Xe = lineX(0) Ye = lineY(0) If (Abs(dx) Abs(dy)) Then epsl = Abs(dx) Else: epsl = Abs(dy) xIncre = dx / epsl yIncre = dy / epsl For k = 0 To epsl (CLng(Xe), CLng(Ye)), RGB(HScroll1(0).Value, HScroll1(1).Value, HScroll1(2).Value) Xe = Xe + xIncre Ye = Ye + yIncre Next k mousedrow = 0 End Sub Private Sub polygonfullstart_Click() mousedrow = 1 n = 0 End Sub Private Sub polygonfullend_Click() mousedrow = 1 39。 5. 運用所學的區(qū)域填充算法 實現(xiàn)區(qū)域填充。 2. 調(diào)用畫點的函數(shù),分別用 DDA、中點 Bresenham 算法和改進 Bresenham 算法繪制直線和中點算法繪制直線、用不同的算法繪制圓和橢圓 ,并各自比較算法精度與效率的差別 。 武漢理工大學《計算機圖形學基礎(chǔ)》課程論文 4 武漢理工大學《計算機圖形學基礎(chǔ)》課程論文 5 程序可以實現(xiàn)圓,橢圓和多邊形的填充功能, 其中圓和橢圓需要輸入圓