寫一段代碼,實作的功能是已知起始點坐標和圓弧半徑繪圖,結果畫出來的弧跟起始點之間有空隙,求指導。想要實作的功能就是連接兩條線的端點,畫出的圖如下:

代碼如下:
Dim Xc As Double '定義圓心坐標
Dim Yc As Double
Dim Rstart As Double '定義其實弧度
Dim Rend As Double '定義終點弧度
Dim pi As Double
pi = 3.1415926
Dim X as Double'定義左邊點的坐標
Dim Y as Double
Dim Length as Double'定義的是兩點之間的水平距離,也就確定了右邊點的坐標
Xc = X + Length / 2
Yc = Y - Sqr(Radius * Radius - Length * Length / 4)
Rstart = pi / 2 - arcsin(Length / (2 * Radius))
Rend = pi / 2 + arcsin(Length / (2 * Radius))
Picture1.Circle (Xc, Yc), Radius, RGB(0, 0, 255), Rstart, Rend
'定義反正弦函式
Private Function arcsin(X) As Double
Dim pi
pi = 3.1415926
If Abs(X) = 1 Then
arcsin = pi / 2
Else
arcsin = Atn(X / Sqr(-X * X + 1))
End If
End Function
uj5u.com熱心網友回復:
呵呵,自己給自己頂一下,那個弧線畫出來也不平滑,有沒有好的實作方法呢?跪求各位指導啊!uj5u.com熱心網友回復:
多半是起始角度和終止角度算錯了建議手動驗證一下2個角度,要用弧度
uj5u.com熱心網友回復:
我是將角度轉化為弧度了啊!感覺沒有算錯啊。uj5u.com熱心網友回復:
不必理論推導了,因為結果很直觀。你試試將所有點的 Y 坐標調整一個偏移量。平滑程度,與顯示設備的解析度有關。當像素很大時,坐標值取整產生了人眼可分辨出的誤差。
uj5u.com熱心網友回復:
在實踐中,改善視覺感受的方法一般是采用灰度處理。對于取整后坐標誤差較大的點,采用灰度處理。誤差越大,灰度越淺。uj5u.com熱心網友回復:
'用像素坐標'
Picture1.ScaleMode = vbPixels
'π盡量用最多的位數'
pi = 3.1415926535898
'圓心在下面應該是加法'
Yc = Y + Sqr(Radius * Radius - Length * Length / 4)
uj5u.com熱心網友回復:
肯定是計算錯了的。很多年前剛學vb的時候做時鐘練手,直接在Picturebox里畫,遇到的問題比這多了,最后發現全都是數學計算的問題,一大堆cos sin的,數學底子薄啊,好在最后都解決了。
樓主慢慢調
uj5u.com熱心網友回復:
Dim Xc As Double '定義圓心坐標
Dim Yc As Double
Dim Rstart As Double '定義起點弧度
Dim Rend As Double '定義終點弧度
Dim pi As Double
Dim X As Double '定義左邊點的坐標
Dim Y As Double
Dim Length As Double '定義的是兩點之間的水平距離,也就確定了右邊點的坐標
'定義反正弦函式
Private Function arcsin(X As Double) As Double
pi = 3.14159265
If Abs(X) = 1 Then
arcsin = pi / 2
Else
arcsin = Atn(X / Sqr(-X * X + 1))
End If
End Function
Private Sub Command1_Click()
pi = 3.14159265
Picture1.ScaleMode = 3 'Pixel
X = 100
Y = 100
Picture1.Circle (X, Y), 4, RGB(0, 0, 0)
Length = 200
Picture1.Circle (X + Length, Y), 4, RGB(0, 0, 0)
Radius = Length / 2 + 10
Xc = X + Length / 2
Yc = Y - Sqr(Radius * Radius - Length * Length / 4)
Rstart = 3 * pi / 2 - arcsin(Length / (2 * Radius))
Rend = 3 * pi / 2 + arcsin(Length / (2 * Radius))
Picture1.Circle (Xc, Yc), Radius, RGB(255, 0, 0)
Picture1.Circle (Xc, Yc), Radius, RGB(0, 0, 255), Rstart, Rend
End Sub
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/112463.html
標籤:VB基礎類
