در برنامه ای که من نوشته بودم وظیفه روتین PaintLine ترسیم یک عقربه بود :
کد:
Public Sub PaintLine(ByVal Percent As Double, ByVal DrawWidth As Long, ByVal LineWidth As Long, ByVal Color As OLE_COLOR)
Dim Degree As Double, X As Long, Y As Long
Degree = Percent * 2 * pi - pi / 2
X = LineWidth * Cos(Degree)
Y = LineWidth * Sin(Degree)
FormMain.PicTemp.DrawWidth = DrawWidth
FormMain.PicTemp.Line (CenterX, CenterY)-(X + CenterX, Y + CenterY), Color
End Sub
اول باید مشخص کنیم که عقربه در چه زاویه ای قرار داره. برای اینکار به مقدار ماکزیمم عدد عقربه احتیاج داریم،
مثلا این مقدار برای عقربه ثانیه شمار 60 است و برای عقربه ساعت شمار 12.
اول مقدار عدد عقربه را بر ماکزیمم اون تقسیم می کنیم تا یک نسبت به دست بیاد. مثلا اگه ساعت 6 است حاصل این
نسبت 0.5 خواهد بود.
اما چون عقربه ساعت بایستی به ازای هر دقیقه هم حرکت مختصری داشته باشد مقدار دقیقه تقسیم بر 720 را هم به
آن اضافه می کنیم :
کد:
[B]Percent[/B] = Hour / 12 + Minute / 720
حالا باید این نسبت را به واحد رادیان تبدیل کنیم :
کد:
Private Const pi As Double = 3.14159265358979
Degree = [B]Percent[/B] * 2 * pi - pi / 2
در اینجا
Percent همان نسبتی است که حساب کرده ایم.
قدم بعدی تبدیل کردن این زاویه به مختصات x و y است :
کد:
X = [B]LineWidth[/B] * Cos(Degree)
Y = [B]LineWidth[/B] * Sin(Degree)
مقدار
LineWidth طول عقربه را مشخص می کند.
و قبل از رسم کردن عقربه باید ضخامت آنرا هم مشخص کنیم :
کد:
FormMain.PicTemp.[B]DrawWidth[/B] = [B]DrawWidth[/B]
DrawWidth ضخامت عقربه را نشان می دهد.
اکنون می توانیم از نقطه مرکز به مختصات (CenterX , CenterY) عقربه مورد نظر را ترسیم کنیم :
کد:
FormMain.PicTemp.Line (CenterX, CenterY)-(X + CenterX, Y + CenterY), [B]Color[/B]
Color رنگ عقربه را مشخص می سازد.
اگر مختصات نقطه دوم را نسبت به نقطه اول تعیین کنیم، از کلمه کلیدی
Step استفاده می شود :
کد:
FormMain.PicTemp.Line (CenterX, CenterY)-[B]Step[/B](X, Y), Color