How to resolve the algorithm Total circles area step by step in the J programming language

Published on 12 May 2024 09:40 PM
#J

How to resolve the algorithm Total circles area step by step in the J programming language

Table of Contents

Problem Statement

Given some partially overlapping circles on the plane, compute and show the total area covered by them, with four or six (or a little more) decimal digits of precision. The area covered by two or more disks needs to be counted only once. One point of this Task is also to compare and discuss the relative merits of various solution strategies, their performance, precision and simplicity. This means keeping both slower and faster solutions for a language (like C) is welcome. To allow a better comparison of the different implementations, solve the problem with this standard dataset, each line contains the x and y coordinates of the centers of the disks and their radii   (11 disks are fully contained inside other disks): The result is   21.56503660... .

Let's start with the solution:

Step by Step solution about How to resolve the algorithm Total circles area step by step in the J programming language

Source code in the j programming language

NB. check points on a regular grid within the bounding box


N=: 400  NB. grids in each dimension.  Controls accuracy.


'X Y R'=: |: XYR=: (_&".;._2~ LF&=)0 :0
 1.6417233788  1.6121789534 0.0848270516
-1.4944608174  1.2077959613 1.1039549836
 0.6110294452 -0.6907087527 0.9089162485
 0.3844862411  0.2923344616 0.2375743054
-0.2495892950 -0.3832854473 1.0845181219
 1.7813504266  1.6178237031 0.8162655711
-0.1985249206 -0.8343333301 0.0538864941
-1.7011985145 -0.1263820964 0.4776976918
-0.4319462812  1.4104420482 0.7886291537
 0.2178372997 -0.9499557344 0.0357871187
-0.6294854565 -1.3078893852 0.7653357688
 1.7952608455  0.6281269104 0.2727652452
 1.4168575317  1.0683357171 1.1016025378
 1.4637371396  0.9463877418 1.1846214562
-0.5263668798  1.7315156631 1.4428514068
-1.2197352481  0.9144146579 1.0727263474
-0.1389358881  0.1092805780 0.7350208828
 1.5293954595  0.0030278255 1.2472867347
-0.5258728625  1.3782633069 1.3495508831
-0.1403562064  0.2437382535 1.3804956588
 0.8055826339 -0.0482092025 0.3327165165
-0.6311979224  0.7184578971 0.2491045282
 1.4685857879 -0.8347049536 1.3670667538
-0.6855727502  1.6465021616 1.0593087096
 0.0152957411  0.0638919221 0.9771215985
)

bbox=: (<./@:- , >./@:+)&R
BBOXX=: bbox X
BBOXY=: bbox Y

grid=: 3 : 0
'MN MX N'=. y
D=. MX-MN
EDGE=. D%N
(MN(+ -:)EDGE)+(D-EDGE)*(i. % <:)N
)

assert 2.2 2.6 3 3.4 3.8 -: grid 2 4 5

GRIDDED_SAMPLES=: BBOXX {@:;&(grid@:(,&N)) BBOXY

Note '4 4{.GRIDDED_SAMPLES'  NB. example
┌─────────────────┬─────────────────┬─────────────────┬─────────────────┐
_2.59706 _2.20043_2.59706 _2.19774_2.59706 _2.19505_2.59706 _2.19236
├─────────────────┼─────────────────┼─────────────────┼─────────────────┤
_2.59434 _2.20043_2.59434 _2.19774_2.59434 _2.19505_2.59434 _2.19236
├─────────────────┼─────────────────┼─────────────────┼─────────────────┤
_2.59162 _2.20043_2.59162 _2.19774_2.59162 _2.19505_2.59162 _2.19236
├─────────────────┼─────────────────┼─────────────────┼─────────────────┤
_2.58891 _2.20043_2.58891 _2.19774_2.58891 _2.19505_2.58891 _2.19236
└─────────────────┴─────────────────┴─────────────────┴─────────────────┘
)
XY=: >,GRIDDED_SAMPLES  NB. convert to an usual array of floats.

mp=: $:~ :(+/ .*)  NB. matrix product
assert (*: 5 13) -: (mp"1) 3 4,:5 12

in=: *:@:{:@:] >: [: mp (- }:)    NB. logical function
assert 0 0 in 1 0 2         NB. X Y  in  X Y R
assert 0 0 (-.@:in) 44 2 3

CONTAINED=: XY in"1/XYR NB. logical table of circles containing each grid
FRACTION=: CONTAINED (+/@:(+./"1)@:[ % *:@:]) N
AREA=: BBOXX*&(-/)BBOXY  NB. area of the bounding box.
FRACTION*AREA

NB. result is 21.5645


  

You may also check:How to resolve the algorithm Forest fire step by step in the Perl programming language
You may also check:How to resolve the algorithm Kaprekar numbers step by step in the 11l programming language
You may also check:How to resolve the algorithm Read entire file step by step in the PHP programming language
You may also check:How to resolve the algorithm Execute Brain step by step in the AppleScript programming language
You may also check:How to resolve the algorithm Nim game step by step in the ALGOL 68 programming language