intrsct=: 4 : 0
R =. x
'C S E'=.y
t=. -(S-C) (+/@:* % ] +/@:* ]) E-S
P=. S + t * E - S NB. perihelion
R>= +/&.:*: (-&C) (S,P,:E) {~ (0 < t) + 1 < t
)
2 intrsct 0 0 0;2 1 1;2 2 2
1
R.E. Boss
-----Oorspronkelijk bericht-----
Van: [email protected]
[mailto:[email protected]] Namens R.E. Boss
Verzonden: donderdag 7 oktober 2010 13:52
Aan: 'Programming forum'
Onderwerp: Re: [Jprogramming] Puzzle: line-circle/sphere intersection
That was bad reading from my side.
The formulas should be:
((S-C)<R)*.((E-C)<R) -...@+. ((S-C)>R)*.((E-C)>R)
D=: +&.*:/"1 (S,:E)-"1 C
(D<R) -...@+.&(*./) D>R
Apart from that, the mathematics is not correct either. I will give it
another thought.
R.E. Boss
> -----Oorspronkelijk bericht-----
> Van: [email protected] [mailto:programming-
> [email protected]] Namens Bo Jacoby
> Verzonden: donderdag 7 oktober 2010 13:02
> Aan: Programming forum
> Onderwerp: Re: [Jprogramming] Puzzle: line-circle/sphere intersection
>
> Hello Boss.
>
> I do not understand your notation. Henry wrote "startpoint S and endpoint
> E". You wrote "endpoints A and B", but you use E in your pseudo code.
> Please explain.
>
> It seems to me that you must compute the distances (s) from C to S, (e)
> from C to E and (p) from C to the closest point P, (the perihelion), and
> you must determine (b) if P is between S and E. Intersection occurs if
> (s<R and e>R) or (s>R and e<R) or (b and p<R and (s>R or e>R)).
>
> --- Den tors 7/10/10 skrev R.E. Boss <[email protected]>:
>
> Fra: R.E. Boss <[email protected]>
> Emne: Re: [Jprogramming] Puzzle: line-circle/sphere intersection
> Til: "'Programming forum'" <[email protected]>
> Dato: torsdag 7. oktober 2010 09.49
>
> Since the word 'intersect' is used, I assume you mean the boundary of the
> circle/sphere (and not the area), so that a line segment which is
> completely
> inside is not intersecting. One point at the boundary means intersecting,
> I
> assume.
> So the segment is not intersecting if and only if it is completely inside
> or
> completely outside the circle/sphere.
>
>
> If the line segment is given by the endpoints A and B, the pseudo code is
> rather straightforward:
>
> ((A-E)<R)*.((B-E)<R) -...@+. ((A-E)>R)*.((B-E)>R)
>
> so ones gets
>
> D=: +&.*:/"1 (A,:B)-"1 E
>
> (D<R) -...@+.&(*./) D>R
>
> (untested)
>
>
> R.E. Boss
>
>
> > -----Oorspronkelijk bericht-----
> > Van: [email protected] [mailto:programming-
> > [email protected]] Namens Henry Rich
> > Verzonden: woensdag 6 oktober 2010 22:54
> > Aan: Programming forum
> > Onderwerp: [Jprogramming] Puzzle: line-circle/sphere intersection
> >
> > Given circle/sphere with center C and radius R, and a line-segment with
> > startpoint S and endpoint E, write the J code to tell whether the
> > line-segment intersects the circle/sphere.
> >
> > R is an atom, the rest are lists with 2 or 3 atoms.
> >
> > This problem arises in collision detection for games and simulators, or
> > if you are trying to see whether a path intersects a round obstacle.
> >
> > I found a solution whose brevity surprised me.
> >
> > Henry Rich
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm