Code zu Mathematik und Geometrie in .NET
Liegt ein Punkt innerhalb eines Kreises?
Folgender Code zeigt eine nicht optimierte Funktion, die ermittelt, ob ein Punkt in, auf oder außerhalb eines Kreises liegt:
Private Enum PointInCircleResult
No = 0
Yes = 1
Border = 2
End Enum
' Man könnte auch 'System.Drawing.Point' verwenden.
Private Structure Point
Public X As Integer
Public Y As Integer
End Structure
Private Structure Circle
Public Radius As Integer
Public Position As Point
End Structure
Private Function PointInCircle( _
ByVal Circle As Circle, _
ByVal Point As Point _
) As PointInCircleResult
Select Case _
Math.Sqrt( _
(Point.X - Circle.Position.X) ^ 2 + _
(Point.Y - Circle.Position.Y) ^ 2 _
)
Case Is < Circle.Radius
Return PointInCircleResult.Yes
Case Is = Circle.Radius
Return PointInCircleResult.Border
Case Is > Circle.Radius
Return PointInCircleResult.No
End Select
End Function
Private Sub TestCircle()
Dim p As New Point(100, 100)
Dim c As New Circle()
c.Radius = 20
c.Position.X = 100
c.Position.Y = 100
Dim s As String
Select Case PointInCircle(c, p)
Case PointInCircleResult.No
s = "Der Punkt liegt außerhalb des Kreises."
Case PointInCircleResult.Yes
s = "Der Punkt liegt innerhalb des Kreises."
Case PointInCircleResult.Border
s = "Der Punkt liegt auf dem Kreis."
End Select
MessageBox.Show(s)
End Sub
Liegt ein Punkt innerhalb einer Ellipse?
Folgender Code stellt fest, ob sich ein Punkt innerhalb des Bereiches einer Ellipse in (verschobener) Hauptlage befindet:
Imports System.Drawing
Public Module Program
Public Sub Main()
' Ein paar Beispiele berechnen und Ergebnis ausgeben.
Dim el As New Ellipse(New Point(10, 10), 20, 10)
Console.WriteLine( _
PointInEllipse(New Point(10, 10), el).ToString() _
)
Console.WriteLine( _
PointInEllipse(New Point(12, 12), el).ToString() _
)
Console.WriteLine( _
PointInEllipse(New Point(100, 10), el).ToString() _
)
Console.WriteLine( _
PointInEllipse(New Point(20, 10), el).ToString() _
)
End Sub
Private Structure Ellipse
Public A As Integer
Public B As Integer
Public Center As Point
Public Sub New( _
ByVal Center As Point, _
ByVal A As Integer, _
ByVal B As Integer _
)
Me.A = A
Me.B = B
Me.Center = Center
End Sub
End Structure
'
' Gibt zurück, ob ein Punkt in einer Ellipse in verschobener Hauptlage
' liegt.
'
Private Function PointInEllipse( _
ByVal Point As Point, _
ByVal Ellipse As Ellipse _
) As Boolean
Return _
( _
(Point.X - Ellipse.Center.X) ^ 2 / Ellipse.A ^ 2 + _
(Point.Y - Ellipse.Center.Y) / Ellipse.B ^ 2 _
<= _
1 _
)
End Function
End Module