It seems odd to me that +/@:* -...@% ] +/@:* ]
would be faster than %. for lists. I thought the first step of %. for non-square arrays would be multiplying by the transpose of y (just as in the longer version), followed by taking the inverse (now of a 1x1 matrix, which should be quick). Henry Rich On 10/9/2010 12:40 PM, R.E. Boss wrote: > Nice solution. > I had forgotten the projecting properties of %. > > Performance improvement is possible by substituting %. by +/@:* -...@% ] +/@:* > ] > > 'C S E'=:10000 ,@#"(0 1) 0 0 0, 1 2 3 ,: _2 8 1 > R=:10000 > > rank'C (R>:+/&.:*:)@:([- ]* 0>.1<.%.)&(-&S) E';'C (R>:+/&.:*:)@:([- ]* > 0>.1<.(+/@:* -...@% ] +/@:* ]))&(-&S) E' > +----+-----+----+----+ > |rank|tm*sz|time|size| > +----+-----+----+----+ > | 1 |2.63 |1.18|2.23| > +----+-----+----+----+ > | 0 |1.00 |1.00|1.00| > +----+-----+----+----+ > > -:/".&>'C (R>:+/&.:*:)@:([- ]* 0>.1<.%.)&(-&S) E';'C (R>:+/&.:*:)@:([- ]* > 0>.1<.(+/@:* -...@% ] +/@:* ]))&(-&S) E' > 1 > > > R.E. Boss > > >> -----Oorspronkelijk bericht----- >> Van: [email protected] [mailto:programming- >> [email protected]] Namens Marshall Lochbaum >> Verzonden: donderdag 7 oktober 2010 22:44 >> Aan: 'Programming forum' >> Onderwerp: Re: [Jprogramming] Puzzle: line-circle/sphere intersection >> >> Alright. Take the projection of the center onto the line segment using >> %. . >> This is not allowed to be more than 0 or less than 1, so use (0>.1<.]) >> to >> take the endpoints if it is. Then find this point on the line again and >> see >> if it is inside the circle. >> C (R>:+/&.:*:)@:([- ]* 0>.1<.%.)&(-&S) E >> >> Not tested yet, but I will update on that... >> Marshall >> >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]] On Behalf Of Henry Rich >> Sent: Thursday, October 07, 2010 7:58 AM >> To: Programming forum >> Subject: Re: [Jprogramming] Puzzle: line-circle/sphere intersection >> >> I intend that a segment wholly inside the circle/sphere to be counted >> as >> intersecting. In other words, the circle/sphere is solid and we want >> to >> know if the segment touches any of it. >> >> Henry Rich >> >> On 10/7/2010 7:52 AM, R.E. Boss wrote: >>> 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 >> >> ---------------------------------------------------------------------- >> 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
