타원 시스템


9

소개

평면에 5 개의 점이 주어지면이 점을 통과하는 타원의 면적을 계산해야합니다.

주어진 입력 값으로 정확히 하나의 축퇴하지 않은 타원을 구성 할 수 있다고 가정 할 수 있습니다.

규칙

입력되고 10, 임의의 편리한 형태로 정수에 대응 x하고 y점의 좌표. 예를 들어, 10정수 목록 [x1, y1, x2, y2, ..., x5, y5]또는으로 입력을 입력 할 수 있습니다 [[x1, y1], [x2, y2], ..., [x5, y5]]. 10 진수도 처리 할 수 ​​있지만 정수만 필요합니다.

출력은 타원 영역을 나타냅니다. 이것은 일부 상징적 표현이거나 최소 8자릿수를 가진 10 진수 값일 수 있습니다 .

이것은 코드 골프이므로 바이트 단위의 최단 답변이 이깁니다.

입력 및 출력 예

입력:

[-2, 3, 2, 5, 5, 3, 4, 0, 1, -3]

산출:

62.15326783788685

이 점들을 통과하는 타원의 묘사 :

이 예제의 타원

더 많은 예 :

f(60, -92, -31, -10, 78, -19, -27, -35, 91, -37) = 9882.59540465108
f(-9, -4, 7, 7, 10, 1, -7, -10, 0, 7) = 269.5966648188643
f(-3, 2, 0, -5, 4, 0, -4, 1, -1, 2) = 98.54937293879908

우연히이 SPOJ 문제에서 영감을 얻었습니까? http://www.spoj.com/problems/ELLIPSE/
xnor

아니었다. 해당 사이트에서 활동하지 않습니다.
Ethan Ward

출력이 상징적 표현 일 수 있다는 것은 무엇을 의미합니까?
xnor

@xnor 아마도 (평가되지 않은) 타원 적분입니까?
Mego

2
Annnnd 작업에 가장 적합한 도구는 수학 그래프 프로그램입니다! Go figure : P.
매직 문어 Urn

답변:


7

매스 매 티카, 87 80 78 바이트

Area@ImplicitRegion[+##Sign@#&@@Det[{1,##,1##,#^2,#2^2}&@@@{x|y,##}]>0,{x,y}]&

5 개의 입력을 [{x1, y1}, ... , {x5, y5}]받습니다 : .

정확한 / 기호 값을 반환합니다.

어떻게?

하자 f(x, y)벡터 나타내는 (1, x, y, xy, x^2, y^2)일부를 x, y.

그런 다음 행 벡터 [f(x, y), f(x1, y1), f(x2, y2), ..., f(x5, y5)]가 있는 행렬의 결정 요인 은 0 (x, y)입니다. 즉, 결정자는 타원에 대한 표현을 제공합니다.

표현식의 부호가 거꾸로 될 수 있으므로 상수 항을 취하고 전체 표현식에 상수의 부호를 곱합니다. 이렇게하면 식을 0보다 크게 설정하여 면적을 찾을 수 있습니다.


+1. 문제를 해결 한 방식이 마음에 듭니다 Sign.
Vitaliy Kaurov

5

MATLAB , 130 (124) 114 바이트

입력 값은 두 개의 열 벡터로, 하나는 x 및 y 좌표를 갖습니다. 이 방법은 모든 점이 정확히 타원에있는 경우 정확한 타원을 제공하는 최소 자승 회귀 분석을 사용하고 여기에 제공된 공식 (@orlp 덕분에)을 적용하여 면적을 계산합니다.

function A=f(x,y);p=null([x.^2,2*x.*y,y.^2,2*x,2*y,0*x+1]);A=pi*det(p([1,2,4;2,3,5;4:6]))/abs(p(1)*p(3)-p(2)^2)^1.5

다음 선을 추가하여 곡선을 그릴 수도 있습니다.

X=x;Y=y;
[x,y] = meshgrid(linspace(-7,7,50));
W = [x(:).^2,2*x(:).*y(:),y(:).^2,2*x(:),2*y(:),0*x(:)+1];
Z=x;Z(:) = W*p;
clf;plot(X,Y,'o');hold on;contour(x,y,Z,[0,0]);

온라인으로 사용해보십시오!


3

매스 매 티카 84 바이트

나는 이것이 흥미로운 문제라는 것을 알았다. 모든 타원은 {x, y} = {Cos (t), Sin (t)}로 매개 변수화 할 수있는 단위 원의 아핀 변환이므로 원의 점을 {xE, yE로 타원에 매핑 할 수 있습니다. } = A {x, y} + B 여기서 A는 상수 행렬이고 B는 벡터입니다. 점을 꽂으면 스칼라 방정식 10 개와 스칼라 미지수 11 개가 생성되지만 t = 0에서 매개 변수화가 시작되도록 결정할 수 있으므로 시스템을 해결할 수 있습니다. 행렬 A의 결정 요인의 절대 값은 타원의 면적 대 단위 원의 비율이므로 Pi를 곱합니다. Max를 복용하면 부정적인 해결책이 사라집니다.

Max[π(a d-b c)/.Solve@MapThread[#2=={e,f}+{a,b}Cos@#+{c,d}Sin@#&,{{0,u,v,w,x},#}]]&

용법:

%@{{-2, 3}, {2, 5}, {5, 3}, {4, 0}, {1, -3}}

수율 :

(1001 π)/(16 Sqrt[10])

2

수학, 144 바이트

x_±y_:=x^2a+b*x*y+y^2c+d*x+e*y+f;n=∞;Integrate[UnitStep[x±y/.FindInstance[And@@(#±#2==0&@@@#),{a,b,c,d,e,f},Reals,2][[1]]],{x,-n,n},{y,-n,n}]& 


모든 테스트 사례에 적용

입력 예 :[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]

결과

9882.59540465108163146329
269.596664818864334050934
98.5493729387989852754258

JungHwan Min
±의 -10 바이트 는 기본 윈도우 인코딩에서 1 바이트입니다 [CP-1252]


흠 ... 입력 예제에서 무한대를 얻는 이유는 무엇입니까?
numbermaniac

@numbermaniac 모르겠다. 나는 그것을 올바르게 얻는다. 이 입력을 사용하고 [{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]있습니까?
J42161217

그래, 난 이상해
numbermaniac

나는 점점 오전 (3575880 π)/(2351 Sqrt[2351])답으로 인정되는
J42161217

1
이상하게도 ClearAll고치지 않습니다. 오, 걱정 하지마 그것이 당신을 위해 작동하는 한. 어떤 버전의 Mathematica를 사용하고 계신가요?
numbermaniac

2

데스 모스 , 101 바이트

u
v
f(a,b,c,h,k,x,y)=(((x-h)cosc+(y-k)sinc)/a)^2+(((x-h)sinc-(y-k)cosc)/b)^2
f(m,n,o,p,q,u,v)~1
mn\pi

온라인 Desmos 는 여러 줄로 된 붙여 넣기를 좋아하지 않으므로 한 번에 한 줄씩 입력해야합니다.

온라인으로 사용해보십시오!

입력은 두 목록 u과으로 이루어 v집니다. 출력은 마지막 줄에 표시됩니다.

설명:

  • 처음 두 줄은 입력 변수의 이름을 지정합니다.
  • 세 번째 선은 반지름 ab, 회전 각도 c및 오프셋 을 사용하여 타원에 대한 방정식을 정의합니다 (h,k).

    • 예식은 다음과 같습니다. 여기에 이미지 설명을 입력하십시오
  • 네 번째 줄의 회귀 계산 f리스트 오버 uv반경 찾는 m하고 n, 회전 각도 o, 및 오프셋 (p,q).

  • 마지막 줄은 공식을 사용하여 타원의 면적을 계산합니다 A = pi*r1*r2

당신은 또한 수 있습니다 그것은 온라인 시도 약간 확장, 상호 작용하는 시각적 버전 (다른 링크). 다섯 점을 중심으로 이동하고 타원과 영역을 실시간으로 볼 수 있습니다.

여기에 이미지 설명을 입력하십시오

또는 이 수식을 사용하는 약간 더 긴 솔루션 이 있습니다 ( @ flawr 's answer 와 동일 ).

데스 모스, 106 바이트

u
v
f(A,B,C,D,E,F,x,y)=Axx+2Bxy+Cyy+2Dx+2Ey+F
f(G,H,I,J,K,L,u,v)~0
\pi(GIL+2HJK-JJK-GKK-HHL)/(GI-HH)^{1.5}

온라인으로 사용해보십시오!


pi마지막 줄에 백 슬래시가 필요하지 않을 수도 있습니다 .를 입력 mnpi하면 pi 기호가 계속 나타납니다. 또한 입력이 아니라 " 출력 이 마지막 행에 표시됨 "을 의미 합니까?
numbermaniac

1
@numbermaniac 백 슬래시를 넣습니다. 복사하여 붙여 넣을 mnpi때 입력 할 때 단어가 있어도 인식하지 못 하기 때문입니다. 그리고 예, 입력이 아닌 출력을 의미했습니다. 감사합니다.
Scott Milner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.