• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: NSBezierPath containsPoint?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: NSBezierPath containsPoint?


  • Subject: Re: NSBezierPath containsPoint?
  • From: "Brian O'Brien" <email@hidden>
  • Date: Thu, 20 Oct 2005 20:47:20 -0600


On 20-Oct-05, at 8:23 PM, Robert Clair wrote:


There HAS to be a better way!


I'm curious. What evidence, exactly, do you have for this statement ?


Of course I could write the algorithm. I could have written the polygon interior test myself as well,
BUT it would be irresponsible to do the work if it had already been done (AND tested).
I guess I just find it hard to believe that the NS classes have no contingency for wanting to test
if you have touched an object within a degree of tolerance.



Some things are intrinsically non-trivial - the best you can to do is hope to pass the problem on to someone else by finding code that they have already written.


Why should I believe that it has not already been done?

As an example, consider the problem of determining whether a point is inside or outside of a closed polygon. You could could teach a small child to decide this correctly every time by looking at a picture. However, teaching a computer to do it is rather involved by comparison: you have to take a ray from the point to infinity, count the number of times it is crossed by segments of the polygon and then see if that number is odd or even. (A real algorithm is even harder - it has to take into account things like ill- conditioned intersections, polygon vertices lying on the ray you have chosen, etc.) By using

   [myPath containsPoint: myPoint]

you have merely passed this work on to someone else who has coded the above algorithm, or its moral equivalent.


The mark of a great development environment is exactly that! Leverage. Leverage. Leverage.

For the price of listening to the lecture I'll give you an easier (in the above sense) way:


Ok. I'm all ears. Now.

As noted, a mathematical line doesn't have any thickness so any practical answer to your question presumes some tolerance - a distance below which you will look the other way and pretend that the point is "on" the line. Take your line and this tolerance and with a little geometry construct a path that outlines the shape you would get by stroking your path with a width of twice the tolerance. Then use containsPoint on that rectangular path.


Believe it or not that was what I decided to do on my own... basically its a rectangle with height 3 and a variable width. There is no outline but it is solid filled.
Still I believe that the NSBezier class should do this for me... Rather then a million programmers writing this over and over and over.
(and a million mailing list readers answering this question over and over and over)


A concern I have is that this may be easy for horizontal and vertical lines but it may fail for different orientations...

Thanks Bob.

Bob Clair


---------------------------------------------------------------------- ----------
OK, put the gamba down slowly and nobody gets hurt.


_______________________________________________
Do not post admin requests to the list. They will be ignored.
Cocoa-dev mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden


_______________________________________________ Do not post admin requests to the list. They will be ignored. Cocoa-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden
  • Follow-Ups:
    • Re: NSBezierPath containsPoint?
      • From: Scott Thompson <email@hidden>
References: 
 >Re: NSBezierPath containsPoint? (From: Robert Clair <email@hidden>)

  • Prev by Date: Re: Performance issue with CoreData SQLite Data Store
  • Next by Date: Re: NSBezierPath containsPoint?
  • Previous by thread: Re: NSBezierPath containsPoint?
  • Next by thread: Re: NSBezierPath containsPoint?
  • Index(es):
    • Date
    • Thread