Hi Henk,

No, it's maybe not obvious but it does take all cases into account.

If the smallest distance is between corners of each rectangle - only then does the 'sqrt' have real meaning. In all other cases, one or other of the DX and DY comes out as 0.

------
 |    |
| R1 |  ------
 |    |  |    |
 |    |  | R2 |
 ------  |    |
         -----


So if there is an overlap in one dimension, (Y above) then DY is calculated as 0 - and the result is the distance in X (i.e. sqrt(DX*DX+0) ).

Alex.


On 16/02/2021 07:45, Henk van der Velden via use-livecode wrote:
Alex,
No one would challenge your definition I think, but your solution only takes 
the corner points into account, right? So this wouldn’t give correct results in 
case the rectangles have different sizes or are positioned obliquely.

Henk


On 16 Feb 2021, at 03:12, use-livecode-requ...@lists.runrev.com wrote:

For me, a more precise problem specification is:

Given two rectangles (in regular Livecode format), the distance between
them is :

?- if they touch or overlap, distance is zero.

?- otherwise, it's the smallest distance from any point in R1 to any
point in R2.

Which leads to a simple solution

function rdist R1, R2
?? local DX, DY
?? put max( item 1 of R1 - item 3 of R2, item 1 of R2 - item 3 of R1,
0) into DX
?? put max( item 2 of R1 - item 4 of R2, item 2 of R2 - item 4 of R1,
0) into DY
?? return sqrt( DX*DX + DY * DY)
end rdist

Alex.
_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to