Rubrik: Grafik und Font · Sonstiges | VB-Versionen: VB4, VB5, VB6 | 18.02.04 |
Punkt im Kreis? Dieser Tipp zeigt, wie man überprüft, ob sich ein Punkt in einem Kreis befindet. | ||
Autor: Malte Treckmann | Bewertung: | Views: 15.370 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Der nachfolgende Tipp zeigt, wie man ¨uberpr¨uft, ob sich ein Punkt in einem Kreis befindet. Dazu werden die Koordinaten des Punktes in die Kreisgleichung eingesetzt.Wenn die Gleichung erf¨ullt ist, liegt der Punkt im Kreis.
Die Kreisgleichung lautet:
(x - xm)2 + (y - ym)2 = r2
mit: | xm, ym | - | Koordinaten des Kreismittelpunktes |
r | - | Kreisradius | |
x, y | - | Koordinaten des Punktes |
Dazu ein Beispiel:
Auf einer Form platzieren Sie ein Picture und in dem Picture ein Kreis-Shape. Anschliessend einfach diesen Quelltext hinter die Form legen. Starten Sie das Programm; wenn Sie mit der Maus auf den Kreis klicken, können Sie ihn verschieben. Die oben beschriebene Zusammenhang wird im MouseDown-Ereignis verwendet. Zun¨achst wird aus den Shape-Eigenschaften der Kreis definiert. Dann wird abgefragt, ob der Mauszeiger (X, Y) sich innerhalb des Kreises befindet. Denn nur dann kann das Shape bewegt werden.
Option Explicit Dim verschieben As Boolean
' -------------------------------- ' Kreis aufnehmen ' -------------------------------- Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, _ X As Single, Y As Single) Dim xm As Double Dim ym As Double Dim r As Double ' -------------------------------- ' Kreisdefinition ' -------------------------------- ' Mittelpunktskoordinaten xm = Shape1.Left + Shape1.Width / 2 ym = Shape1.Top + Shape1.Height / 2 ' Radius ' = die kleinere Ausdehnung If Shape1.Width > Shape1.Height Then r = Shape1.Height / 2 Else r = Shape1.Width / 2 End If ' -------------------------------- ' wurde in den Kreis geklickt? ' -------------------------------- If (X - xm) ^ 2 + (Y - ym) ^ 2 <= r ^ 2 Then verschieben = True End If End Sub
' -------------------------------- ' Kreis verschieben ' -------------------------------- Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If verschieben = True Then Shape1.Left = X - Shape1.Width / 2 Shape1.Top = Y - Shape1.Height / 2 End If End Sub
' -------------------------------- ' Kreis ablegen ' -------------------------------- Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, _ X As Single, Y As Single) If verschieben = True Then Shape1.Left = X - Shape1.Width / 2 Shape1.Top = Y - Shape1.Height / 2 ' Flag zuruecksetzen verschieben = False End If End Sub