Ville prøve at lave et speedometer til bil, men har ingen anelse om hvordan jeg gør. Har ledt lidt efter en guide til sin/cos ur, men har kun fundet til VB6... Er der nogen der kan hjælpe med at lave analoge visere???
Imports System Imports System.Drawing Imports System.Windows.Forms
Public Class MainForm Inherits Form Private Const MAX_SPEED As Integer = 200 Private speed As Integer Private speedshow As PictureBox Private up As Button Private down As Button Public Sub New() speed = 0 speedshow = New PictureBox() up = New Button() down = New Button() SuspendLayout() speedshow.Location = New Point(50, 50) speedshow.Size = New Size(300, 300) speedshow.BorderStyle = BorderStyle.FixedSingle AddHandler speedshow.Paint, AddressOf ShowPaint up.Location = New Point(50, 400) up.Size = New Size(150, 50) up.Text = "Speed up" AddHandler up.Click, AddressOf UpClick down.Location = New Point(200, 400) down.Size = New Size(150, 50) down.Text = "Speed down" AddHandler down.Click, AddressOf DownClick ClientSize = New Size(400, 500) Controls.Add(speedshow) Controls.Add(up) Controls.Add(down) Text = "Speedometer" ResumeLayout(False) End Sub Private Sub UpClick(sender As Object, e As EventArgs) speed = Math.Min(MAX_SPEED, speed + 10) speedshow.Invalidate() End Sub Private Sub DownClick(sender As Object, e As EventArgs) speed = Math.Max(0, speed - 10) speedshow.Invalidate() End Sub Private Sub ShowPaint(sender As Object, e As PaintEventArgs) e.Graphics.FillPie(New SolidBrush(Color.Gray), 25, 100, 250, 250, 180, 180) e.Graphics.DrawLine(New Pen(Color.Red, 5), 150, 225, CSng(150 + 125 * Math.Cos(speed * Math.PI / MAX_SPEED)), CSng(225 - 125 * Math.Sin(speed * Math.PI / MAX_SPEED))) End Sub <STAThread> _ Public Shared Sub Main(args As String()) Application.Run(New MainForm()) End Sub End Class
Har fået lavet dette modul: Skrevet til vb6, har prøvet at rette til vb2010. Så der er nok fejl i... ################################################ Module Module1 Public Structure POINT Friend X As Object Friend Y As Object
End Structure
Public P As POINT
Public tSine(3599) As Single Public tCoSine(3599) As Single
Public Sub LoadTables() Dim i As Long
For i = 0 To 3599 tSine(i) = Math.Sin(D2R(i / 10)) tCoSine(i) = Math.Cos(D2R(i / 10)) Next i End Sub
Public Function Sine(ByVal Angle As Long) As Single If Angle < 0 Then Angle = 360 + (Angle Mod 360) If Angle > 359 Then Angle = Angle Mod 360
Sine = tSine(Angle) End Function
Public Function CoSine(ByVal Angle As Long) As Single If Angle < 0 Then Angle = 360 + (Angle Mod 360) If Angle > 359 Then Angle = Angle Mod 360
CoSine = tCoSine(Angle) End Function
Public Function D2R(ByVal Angle As Single) As Single D2R = Angle / 180 * Math.PI End Function
Public Function RotatePoint(ByRef pPoint As POINT, ByRef pOrigin As POINT, ByVal Degrees As Single) As POINT RotatePoint.X = pOrigin.X + CoSine(Degrees) * (pPoint.X - pOrigin.X) - Sine(Degrees) * (pPoint.Y - pOrigin.Y) RotatePoint.Y = pOrigin.Y + Sine(Degrees) * (pPoint.X - pOrigin.X) + CoSine(Degrees) * (pPoint.Y - pOrigin.Y) End Function
End Module ################################################
Så står der i guiden: Hvordan går jeg det ??? ################################################
Create a function called LoadTables, and add this:
Public Sub LoadTables() Dim i As Long
For i = 0 To 3599 tSine(i) = Sin(D2R(i / 10)) tCoSine(i) = Cos(D2R(i / 10)) Next i End Sub ################################################
Og så her til sidst ;) Hvordan bruger jeg så denne formel :P
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.