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 eines Kreises?

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
Liegt ein Punkt innerhalb einer Ellipse?