Results 1 to 6 of 6

Thread: Point intersect with Ellipse

  1. #1

    Point intersect with Ellipse

    Ik weet dat er in Delphi een PtInRect functie bestaat waarmee je makkelijk kan bepalen of een punt in een TRect intersect. Alleen bestaat er ook zoiets voor een ellipse? Ik ben bezig met een component, waar ik een ellipse op teken - en ik wil weten of ik in de ellipse klik. Ik ben al wat aan het zoeken gegaan, maar ik kom er niet helemaal aan uit. Nu weet ik niet misschien bestaat er al een functie voor, of wellicht iemand die al met dit bijltje gehakt heeft en mij uit de brand kan helpen

    bij voorbaat dank!

  2. #2
    Quote Originally Posted by Reidinga View Post
    Ik weet dat er in Delphi een PtInRect functie bestaat waarmee je makkelijk kan bepalen of een punt in een TRect intersect.
    Naast PtInRect bestaat er ook PtInCircle.
    Al iets meer zoals je zoekt
    https://docwiki.embarcadero.com/Code...ircle_(Delphi)

    (Gewoon via Google gevonden)

    Heb je al gezocht op PtInEllipse icm Delphi?
    Je zult verbaasd staan over de resultaten.

    Overigens heb je dan wel de moeilijkheid van hoe je ellipse georiënteerd is. Want dat kan natuurlijk nog tot problemen leiden.

  3. #3
    Delphi Code:
    1. function PtInEllipse(const Rect: TRect; const P: TPoint): Boolean;
    2. var
    3.   a, b: Integer;
    4.   center: TPoint;
    5. begin
    6.   // algemene vergelijking van een ellips met center in (0,0)
    7.   // x^2/a^2 + y^2/b^2 = 1
    8.   // a = halve lange as; b = halve korte as
    9.   // ellipse-function in Delphi: ellipse(aRect), waarbij aRect: TRect
    10.  
    11.   // bepaling van de assen:
    12.   a := Rect.Width div 2;
    13.   b := Rect.Height div 2;
    14.  
    15.   // bepaling van het 'midden' van de ellips:
    16.   center.x := Rect.Left + a;
    17.   center.y := Rect.Top + b;
    18.  
    19.   //  ellips transleren naar (center.x, center.y)
    20.   Result := Sqr((P.X - Center.X) / a) +
    21.       Sqr((P.Y - Center.Y) / b) <= 1;
    22. end;

  4. #4
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,341
    Typisch is er ook nog een hoek voor oriëntatie.

  5. #5
    Precies, daar waarschuwde ik ook al voor.

    Deze is prima te vinden:
    Delphi Code:
    1. function PtInEllipse(const Pt: TPoint; const EBR: TRect): Boolean;
    2. begin
    3.   Result := (Sqr((Pt.X * 2 - EBR.Left - EBR.Right) / (EBR.Right - EBR.Left)) +
    4.     Sqr((Pt.Y * 2 - EBR.Top - EBR.Bottom) / (EBR.Bottom - EBR.Top))) <= 1;
    5. end;

    Maar een ovaal kan ook gekanteld zijn.

    Als je een kantelhoek hebt dan zou je natuurlijk ook eerst je "punt" kunnen roteren over een x/y-as en daarna deze functie erop los laten. Dan zou het volgens mij ook moeten werken

    (Je hoeft dus niet moeilijk te doen om de ellipse te kantelen als je dat al met je punt de andere kant op gedaan hebt. Wel een gedoe om het even goed te testen)

  6. #6
    Dankjewel! Dat is exact wat ik hoopte te vinden, ik zal verkeerd gezocht hebben want heb een dag zitten zoeken en deze niet tegen gekomen.. ik had zelf al een functie gemaakt maar die was nogal “traag”, dit is veel beter dankjulliewel 😁

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •