hallo zusammen
ich habe hier ein problem und zwar habe ich mit hilfe eines kollegen die folgende berechnung zur bogenlängenberechnnung gemacht ....siehe code.
Alle Bogenlängen werden berechnet und in der listbox ausgegeben ...das alles funktioniert. Benötigt werden eine button, eine picturebox und eine liste.
Nun möchte ich das die längste bogenlänge ermittelt wird und alle diese wie ein diagramm in der picturebox dargestellt werden. Ich brauche hierfür nur die endpunkte
also pset .
wie kann ich das tun ?
Option Explicit ' Explizite Variablendeklaration erzwingen
' Ein Kreis:
Private Type T_Kreis
X As Double
Y As Double
Radius As Double
End Type
' Ein 2D-punkt.
Private Type T_Point
X As Double
Y As Double
End Type
Const PI = 3.14
' Berechnet des arcsin einer Zahl:
Public Function Arkuskosinus(X As Double)
If X = 1 Or X = -1 Then
Arkuskosinus = 0
Else
Arkuskosinus = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
End If
End Function
Private Sub Command1_Click()
Dim Grau As Long
Grau = RGB(120, 120, 120)
List1.Clear
' Der Kleine Kreis wird deklariert:
Dim Klein As T_Kreis
Klein.X = 200
Klein.Y = 100
Klein.Radius = 50
' der Große Kreis wird deklariert:
Dim Groß As T_Kreis
Groß.X = 200
Groß.Y = 200
Groß.Radius = 150
' beide Kreise werden ausgegeben:
Picture1.Circle (Klein.X, Klein.Y), Klein.Radius, Grau
Picture1.Circle (Groß.X, Groß.Y), Groß.Radius, Grau
Picture1.PSet (Klein.X, Klein.Y), vbBlack
Picture1.PSet (Groß.X, Groß.Y), vbBlack
Dim alpha As Double, beta As Double
Dim Punkt As T_Point, Punkt2 As T_Point
Dim Akt_Radius As Double ' radius des aktuellen Kreisbogens
' alle Winkel von 0 bis PI werden durchlaufen.
' dabei stellt Punkt die linke und Punkt2 die rechte Grenze des Kreisbogens dar.
For alpha = 0 To PI Step 0.5
Punkt.X = Klein.X - (Klein.Radius * Sin(alpha))
Punkt.Y = Klein.Y - (Klein.Radius * Cos(alpha))
Picture1.PSet (Punkt.X, Punkt.Y), vbRed
Punkt2.X = Klein.X + (Klein.Radius * Sin(alpha))
Punkt2.Y = Punkt.Y
Picture1.PSet (Punkt2.X, Punkt2.Y), vbBlue
' der aktuelle Kreisbogen wird gezeichnet:
Akt_Radius = Sqr((Groß.X - Punkt.X) ^ 2 + (Groß.Y - Punkt.Y) ^ 2)
beta = Arkuskosinus((Groß.Y - Punkt.Y) / Akt_Radius)
If beta <> 0 Then
Picture1.Circle (Groß.X, Groß.Y), Akt_Radius, , (PI / 2) - beta, (PI / 2) +
beta
List1.AddItem "Winkel: " & CStr(beta) & "; Länge: " & (Akt_Radius * 2 *
beta)
End If
Next alpha
End Sub
Private Sub Form_Load()
Picture1.ScaleMode = 3
Picture1.DrawWidth = 2
Picture1.BackColor = vbWhite
End Sub