당신을 위해 기만적으로 도전하는 지오메트리 퍼즐이 있습니다!
원 A
과 n
다른 원 이 있다면 그 B[n]
안에 포함 된 총 면적 A
이 원 안에 있지 않습니다B
.
코드는 가능한 짧아야합니다.
입력
입력 내용에는 다음 정보가 포함되어야합니다.
- 부동 소수점 숫자는 원의 반경을 나타내는
A
. - 의 반지름을 나타내는 부동 소수점 숫자의 목록입니다
B
. - 의 원 중심 목록입니다
B
. 프로그램은 중심이 극좌표 또는 데카르트 좌표를 기대할 수 있습니다. - 선택적
n
으로 B로 원 의 수 를 받을 수 있습니다 . 이 입력은 필요하지 않습니다.
원의 중심이 A
원점, 즉 점 이라고 가정합니다 (0, 0)
.
두 원 B
이 동일하다는 보장 은 없지만 모든 B
교차 원 A
, 중심이 B
모두 바깥 A
에 있거나 두 원이 B
서로 교차 하지는 않습니다 . 솔루션이 다양한 에지 케이스를 처리 할 수 있는지 확인하십시오.
어떤 순서로든 텍스트 입력 형식 (stdin 또는 해당 언어를 통해), 함수 매개 변수 또는 명령 줄 인수로 입력을받을 수 있습니다.
텍스트 입력을 받도록 선택한 경우 입력 사이에 하나 또는 두 개의 문자로 인쇄 가능한 ASCII 구분자가 있어야합니다.
산출
프로그램 또는 함수는 A
의 원 안에 포함되지 않은 총 면적을 나타내는 단일 부동 소수점 숫자를 출력해야합니다 B
. 귀하의 답변은 모든 테스트 사례에 대해 적어도 세 개의 유효 숫자로 정확해야합니다.
일반적인 코드 골프 규칙이 적용됩니다.
면적을 결정하기 위해 원 안의 샘플링 지점에 의존해서는 안됩니다.
원의 교차점을 자동으로 찾거나 원의 교차점에서 영역을 찾거나이 문제를 즉시 해결하는 내장 기능은 허용되지 않습니다.
테스트 사례
각 이미지에서 원 A
은 파란색으로, 원 B
은 녹색으로 채워지고 검은 색으로 채워집니다. 반환해야 할 영역이 빨간색으로 채워집니다.
( 내 솔루션을 확인한 Rainer P. 에게 감사드립니다 )
테스트 사례 1 :
A = {x: 0, y: 0, rad: 50}
B[0] = {x: 0, y: 0, rad: 100}
Result: 0.00
테스트 사례 2 :
A = {x: 0, y: 0, rad: 100.000000}
B[0] = {x: 100.000000, y: 0.000000, rad: 50.000000}
B[1] = {x: 30.901699, y: -95.105652, rad: 50.000000}
B[2] = {x: -80.901699, y: -58.778525, rad: 50.000000}
B[3] = {x: -80.901699, y: 58.778525, rad: 50.000000}
B[4] = {x: 30.901699, y: 95.105652, rad: 50.000000}
Result: 1.3878e+04
테스트 사례 3 :
A = {x: 0, y: 0, rad: 138}
B[0] = {x: 100, y: 0, rad: 100}
B[1] = {x: -50, y: -86, rad: 100}
B[2] = {x: -93, y: 135, rad: 50}
Result: 1.8969e+04
테스트 사례 4 :
A = {x: 0, y: 0, rad: 121.593585}
B[0] = {x: 81.000000, y: 107.000000, rad: 59.841457}
B[1] = {x: -152.000000, y: -147.000000, rad: 50.000000}
B[2] = {x: 43.000000, y: -127.000000, rad: 105.118980}
B[3] = {x: 0.000000, y: -72.000000, rad: 57.870545}
B[4] = {x: -97.000000, y: -81.000000, rad: 98.488578}
B[5] = {x: -72.000000, y: 116.000000, rad: 66.468037}
B[6] = {x: 2.000000, y: 51.000000, rad: 50.000000}
Result: 1.1264e+04
테스트 사례 5 :
A = {x: 0, y: 0, rad: 121.605921}
B[0] = {x: 0.000000, y: -293.000000, rad: 250.000000}
B[1] = {x: 0.000000, y: -56.000000, rad: 78.230429}
B[2] = {x: 0.000000, y: -102.000000, rad: 100.000000}
Result: 2.6742e+04
제안 된 독서 :
Fewell, MP "세 원의 공통 중첩 영역." 2006 년 10 월. 웹. http://dspace.dsto.defence.gov.au/dspace/bitstream/1947/4551/4/DSTO-TN-0722.PR.pdf .
B
다른 서클이 포함 된 테스트 사례가없는 것 같습니다 . 그것을 추가 할 가치가있을 수 있습니다.
1.8970e+04
있습니다.
B[0] - A intersection: 20653.659515
, B[1] - A intersection: 20757.824115
, B[1] - B[0] intersection: 1841.847766
, B[2] - A intersection: 1289.164541
, 얻을 수있는 18969.69009
대답한다.