for i = 0 to 23
'' ...
'' create 'line' control
'' ...
line.x1 = (inner_radius*cos(15 * i)) + centerx
line.y1 = (inner_radius*sin(15 * i)) + centery
line.x2 = (outer_radius*cos(15 * i)) + centerx
line.y2 = (outer_radius*sin(15 * i)) + centery
next
我使用這個算法,以呈現多線控制,使類似以下內容:繪製與徑向線一圈
結果是相當奇特:
我認爲這是由於cos()和sin()函數的舍入,所以我的問題是,是否有一些算法我可以申請修復舍入?或者有更好的方法來呈現這種控制,也許?
編輯:
的問題,指出通過Hrqls是,我是用度而非弧度......這是我結束了使用功能:
Sub ProgressAnim(ByVal centerx, _
ByVal centery, _
ByVal outer_radius, _
ByVal inner_radius, _
ByVal step_count, _
ByVal line_width)
Dim pi
Dim degstep
Dim scan
Dim newcontrol As Line
Dim controlid
pi = 4 * Atn(1)
degstep = pi/(step_count/2)
For scan = 0 To step_count - 1
controlid = "line" & (scan + 1)
Set newcontrol = Me.Controls.Add("vb.line", controlid)
newcontrol.X1 = centerx + (inner_radius * Cos(degstep * scan))
newcontrol.Y1 = centery + (inner_radius * Sin(degstep * scan))
newcontrol.X2 = centerx + (outer_radius * Cos(degstep * scan))
newcontrol.Y2 = centery + (outer_radius * Sin(degstep * scan))
newcontrol.BorderStyle = 1
newcontrol.BorderWidth = line_width
newcontrol.Visible = True
Next
End Sub
調用它這樣
ProgressAnim 150, 250, 16, 9, 18, 1
產生這樣的:
這更接近我的預期......可悲的是,我仍然不知道如何實現抗鋸齒,但是這樣做。 (目前,至少):)
請發表您的變量聲明......是什麼類型的變量? ...在所有表單代碼和模塊的頂部使用「顯式選項」以確保您聲明所有變量 – Hrqls
嗯,變量的類型是Variant,但我完全處於錯誤的軌道......問題在於我使用的是degs而不是rads。 – ferc
我在錯誤的軌道上,直到我在行尾打印數字..這告訴我,我以假定的順序打印的線,但跳過大部分的圓,實際上走了圈了幾次..因此角步太大:) – Hrqls