[VB12] Punkt in Ellipse?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    [VB12] Punkt in Ellipse?

    Hey Leute,

    Ich habe seit langem mal wieder ein Problem. Und zwar schreibe ich gerade an einem Steuerelement, welches verschiedene Stile haben soll. Ich bin gerade am Coden eines Stiles, bei dem eine Ellipse gezeichnet wird. Soweit so gut. Mein Problem besteht darin, dass dem Nutzer angezeigt werden soll wenn die Maus im Button ist, also dass eine Art Schatten gezeichnet wird. Aber ich weiß nicht wie man herausfindet ob ein Punkt in einer Ellipse ist xD Weiß da zufällig jemand eine Lösung?

    LG
    Jo, man kann eine Ellipse auf einen GraphicsPath zeichnen (bzw. man kann beliebige Formen drauf zeichnen) und prüfen, ob ein Punkt innerhalb einer gewissen Kontur ist.

    Vollständigkeitshalber aber auch die Mathematische Lösung:
    Du hast einen Winkel Alpha. Der ergibt sich aus Math.Atan2(Maus.Y - Mittelpunkt.Y, Maus.X - Mittelpunkt.X)
    Und Du hast die Entfernung der Maus zum Mittelpunkt (Pythagoras).
    Mit diesen diesen Formeln kannst Du die X- und Y-Komponenten der Entfernung eines Punktes auf der Ellipse zum Mittelpunkt berechnen, wenn der Winkel gegeben ist, und somit auch (mit Pythagoras) den Betrag dieser Entfernung.
    Die Maus befindet sich in der Ellipse, wenn die Entfernung zwischen Mittelpunkt und Maus kleiner ist, als die Entfernung zwischen Mittelpunkt und dem Punkt auf der Ellipse.
    Bilder
    • Ellipse.png

      14,45 kB, 1.115×517, 212 mal angesehen
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Niko Ortner“ ()

    ChOoSeMyNaMe
    Hi !
    Bin mir jetzt nicht sicher, ob ich deine Frage richtig verstanden habe. Ich weis nicht ob Du den Punkt der Mausposition meinst oder irgend einen anderen.

    XML-Quellcode

    1. <!--Ellipse-->
    2. <Style x:Key="stylePunkt" TargetType="Ellipse">
    3. <Setter Property="Fill" Value="#FFF75D30"/>
    4. <Setter Property="Cursor" Value="Hand"/>
    5. <Setter Property="Opacity" Value="0.2"/>
    6. <Style.Triggers>
    7. <Trigger Property="IsMouseOver" Value="True" >
    8. <Setter Property="Fill" Value="#FFC6CFF7"/>
    9. <Setter Property="Cursor" Value="Hand"/>
    10. <Setter Property="Opacity" Value="0.6"/>
    11. </Trigger>
    12. </Style.Triggers>
    13. </Style>
    @ChOoSeMyNaMe Nimm die Ellipsengleichung.
    Da es sich um ein Control handelt, ist die Ellipse achsparallel.
    Der Rand gehorcht dieser Gleichung

    Quellcode

    1. x^2/a^2 + y^2/b^2 = 1

    Die innere Fläche gehorcht der Gleichung

    Quellcode

    1. x^2/a^2 + y^2/b^2 < 1
    x und y sind die Koordinaten, a und b die Halbachsen.
    Ändere dies, x0, y0 - Mittelpunktkoordinaten
    x => (x - x0)
    y => (y - y0)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „RodFromGermany“ ()