Bit of a problem with the matrix division thing...

   l=.10* <:+:1e6 ?...@$ 0
   r=.10* <:+:1e6 ?...@$ 0
   6!:2 'l %."0 r'
3.09424
   6!:2 'l (+/ .*~ %.)"0 r'
0.481168
   6!:2 'l %"0 r'
0.1251

It appears that multiplying by the inverse is much faster than doing matrix
division, which certainly shouldn't be true.
It probably also explains the speed disparity between %. and +/@:* -...@% ]
+/@:* ]  because the latter uses % in place of %. .

Marshall

-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Henry Rich
Sent: Saturday, October 09, 2010 5:22 PM
To: Programming forum
Subject: Re: [Jprogramming] Puzzle: line-circle/sphere intersection

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

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to