Hệ thống elip


9

Giới thiệu

Cho năm điểm trong mặt phẳng, nhiệm vụ của bạn là tính diện tích hình elip đi qua các điểm này.

Bạn có thể giả sử rằng chính xác một hình elip không suy biến có thể được xây dựng với các giá trị đầu vào đã cho.

Quy tắc

Đầu vào là 10số nguyên dưới mọi hình thức thuận tiện, tương ứng với tọa độ xyđiểm của các điểm. Ví dụ: bạn có thể lấy đầu vào làm danh sách các 10số nguyên [x1, y1, x2, y2, ..., x5, y5]hoặc dưới dạng [[x1, y1], [x2, y2], ..., [x5, y5]], v.v. Bạn cũng có thể xử lý các số thập phân, nhưng chỉ yêu cầu số nguyên.

Đầu ra là một đại diện của khu vực của hình elip. Đây có thể là một số biểu thức tượng trưng hoặc giá trị thập phân có ít nhất các 8chữ số chính xác.

Đây là môn đánh gôn, vì vậy câu trả lời ngắn nhất bằng byte sẽ thắng.

Ví dụ đầu vào và đầu ra

Đầu vào:

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

Đầu ra:

62.15326783788685

Một mô tả về hình elip đi qua các điểm sau:

Hình elip cho ví dụ này

Ví dụ khác:

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

Đây có phải là bất kỳ cơ hội lấy cảm hứng từ vấn đề SPOJ này? http://www.spoj.com/probols/ELLIPSE/
xnor

Nó không phải là. Tôi không hoạt động trên trang web đó.
Phường Ethan

Điều đó có nghĩa là đầu ra có thể là một biểu thức tượng trưng?
xnor

@xnor Có lẽ một tích phân elip (không đánh giá)?
Mego

2
Annnnd công cụ tốt nhất cho công việc là tooooooo: các chương trình đồ họa toán học! Đi hình: P.
Bạch tuộc ma thuật Urn

Câu trả lời:


7

Toán học, 87 80 78 byte

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

Có 5 đầu vào : [{x1, y1}, ... , {x5, y5}].

Trả về một giá trị chính xác / tượng trưng.

Làm sao?

Hãy f(x, y)biểu thị vector (1, x, y, xy, x^2, y^2)cho một số x, y.

Sau đó, yếu tố quyết định của ma trận với các vectơ hàng [f(x, y), f(x1, y1), f(x2, y2), ..., f(x5, y5)]là 0 iff (x, y)là một điểm trên hình elip mà chúng ta đang tìm kiếm. tức là định thức đưa ra biểu thức cho hình elip.

Vì dấu của biểu thức có thể bị đảo ngược, chúng tôi lấy số hạng không đổi và nhân toàn bộ biểu thức với dấu của hằng. Bằng cách đó, chúng ta có thể đặt biểu thức lớn hơn 0 để tìm khu vực.


+1. Tôi thích cách bạn khắc phục một vấn đề với Sign.
Vitaliy Kaurov

5

MATLAB , 130 124 114 byte

Đầu vào là takean dưới dạng hai vectơ cột, một cho x- và một cho tọa độ y. Phương pháp này sử dụng hồi quy tuần tự tối thiểu, cung cấp hình elip chính xác nếu tất cả các điểm chính xác trên hình elip, sau đó áp dụng công thức được cung cấp ở đây (cảm ơn @orlp) để tính diện tích.

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

Bằng cách nối thêm các dòng sau, bạn thậm chí có thể vẽ đường cong:

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]);

Hãy thử trực tuyến!


3

Toán học 84 byte

Tôi thấy đây là một vấn đề thú vị. Mỗi hình elip là một phép biến đổi affine của vòng tròn đơn vị có thể được tham số hóa là {x, y} = {Cos (t), Sin (t)}, do đó, các điểm trên vòng tròn có thể được ánh xạ tới hình elip theo {xE, yE } = A {x, y} + B trong đó A là ma trận không đổi và B là một vectơ. Việc cắm vào các điểm mang lại 10 phương trình vô hướng và 11 ẩn số vô hướng, nhưng chúng ta có thể quyết định rằng việc tham số hóa bắt đầu từ t = 0, vì vậy hệ thống có thể giải được. Giá trị tuyệt đối của định thức của ma trận A là tỷ lệ diện tích của hình elip với vòng tròn đơn vị để chúng ta nhân với Pi. Lấy Max được loại bỏ các giải pháp tiêu cực.

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

Sử dụng:

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

Sản lượng:

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

2

Toán học, 144 byte

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}]& 


làm việc cho tất cả các trường hợp thử nghiệm

Ví dụ đầu vào :[{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]

Các kết quả

9882,59540465108163146329
269.596664818864334050934
98.5493729387989852754258

-10 byte từ JungHwan Min
± là 1 byte trong mã hóa cửa sổ mặc định [CP-1252]


Hmm ... tại sao tôi nhận được vô hạn trên ví dụ đầu vào của bạn?
numbermaniac

@numbermaniac Tôi không biết. Tôi hiểu rồi bạn đang sử dụng đầu vào này [{{-3, 2}, {0, -5}, {4, 0}, {-4, 1}, {-1, 2}}]?
J42161217

Vâng, tôi - thật lạ.
numbermaniac

Tôi nhận được (3575880 π)/(2351 Sqrt[2351])câu trả lời như một câu trả lời
J42161217

1
Lạ, thậm chí ClearAllkhông sửa nó. Oh tốt, đừng lo lắng về nó haha. Miễn là nó hoạt động cho bạn. Bạn đang dùng phiên bản nào của Mathicala?
numbermaniac

2

Desmos , 101 byte

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 trực tuyến không giống như bột nhão nhiều dòng, vì vậy bạn phải nhập nó vào một dòng tại một thời điểm, hoặc

Dùng thử trực tuyến!

Đầu vào được thực hiện với hai danh sách uv. Đầu ra được hiển thị trên dòng cuối cùng.

Giải trình:

  • Hai dòng đầu tiên đặt tên cho các biến đầu vào.
  • Dòng thứ ba xác định phương trình cho bất kỳ hình elip nào, với bán kính ab, góc xoay cvà bù (h,k).

    • Được chỉnh sửa, nó trông như thế này: nhập mô tả hình ảnh ở đây
  • Dòng thứ tư tính toán hồi quy của fcác danh sách uv, tìm bán kính mn, góc quay ovà bù (p,q).

  • Dòng cuối cùng tính diện tích hình elip với công thức A = pi*r1*r2

Bạn cũng có thể dùng thử trực tuyến (liên kết khác) cho phiên bản trực quan tương tác được mở rộng một chút. Bạn có thể di chuyển xung quanh năm điểm và xem hình elip và khu vực trong thời gian thực:

nhập mô tả hình ảnh ở đây

Ngoài ra, đây là một giải pháp dài hơn một chút bằng cách sử dụng công thức này (giống như câu trả lời của @ flawr ):

Desmos, 106 byte

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}

Dùng thử trực tuyến!


Bạn có thể không cần dấu gạch chéo ngược ở đó pitrên dòng cuối cùng: nếu tôi nhập mnpi, biểu tượng pi vẫn hiển thị. Ngoài ra, bạn có nghĩa là " đầu ra được hiển thị trên dòng cuối cùng", không phải đầu vào?
numbermaniac

1
@numbermaniac Tôi đang đặt dấu gạch chéo ngược bởi vì khi tôi sao chép-dán nó vào, nó không nhận ra mnpi, mặc dù nó có chữ khi tôi gõ nó ra. Và vâng, tôi có nghĩa là đầu ra, không phải đầu vào, cảm ơn.
Scott Milner
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.