Đây có phải là tứ giác tuần hoàn?


18

Trong toán học, một tứ giác tuần hoàn là một đỉnh có tất cả các đỉnh nằm trên cùng một đường tròn. Nói cách khác, mọi đỉnh nằm trên đường tròn của ba vòng còn lại. Để biết thêm thông tin, xem bài viết MathWorld .

Ví dụ

Các tứ giác này là chu kỳ:

Tứ giác tuần hoàn

Hình thang này không tuần hoàn.

Hình thang

(Hình ảnh từ Wikipedia)

Mục tiêu

Cho tọa độ của bốn đỉnh theo thứ tự ngược chiều kim đồng hồ tạo thành một tứ giác lồi, xác định xem tứ giác đó có theo chu kỳ không.

Các tọa độ sẽ là các số nguyên (tuy nhiên, lưu ý rằng tọa độ của chu vi và chu vi không nhất thiết là các số nguyên.) Theo ngụ ý của đoạn trước, không có ba điểm nào sẽ cùng tuyến tính và không có hai điểm trùng nhau.

Tôi / O

Bạn có thể lấy đầu vào bằng cách sử dụng bất kỳ định dạng hợp lý. Đặc biệt, [[x1,x2,x3,x4],[y1,y2,y3,y4]], [[x1,y1],[x2,y2],[x3,y3],[x4,y4]]và số phức đều tốt.

Đầu ra sử dụng bất kỳ giá trị nhất quán khác nhau cho đúng và sai.

Các trường hợp thử nghiệm

Thật:

[0,0], [314,0], [314,1], [0,1]
[-5,5], [5,-5], [1337,42], [42,1337]
[104, -233], [109, -232], [112, -231], [123, -224]

Sai:

[0,0], [314,0], [314,100], [0,99]
[31,41],[59,26],[53,58],[0,314]

Câu trả lời:


11

Ngôn ngữ Wolfram (Mathicala) , 23 byte

#∈Circumsphere@{##2}&

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

Mất bốn đầu vào: danh sách {x1,y1}, {x2,y2}, {x3,y3}, và {x4,y4}. Kiểm tra nếu điểm đầu tiên nằm trên đường tròn của ba vòng còn lại. Cũng hoạt động để kiểm tra xem điểm trong có song song hay không, với điều kiện cuối cùng là độc lập hoàn toàn (vì thật buồn nếu bạn cho nó một đầu vào suy biến).n+1RnnCircumsphere

Ngoài ra, đây là một cách tiếp cận toán học:

Ngôn ngữ Wolfram (Mathicala) , 29 28 25 24 byte

Det@{#^2+#2^2,##,1^#}^0&

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

Có hai danh sách làm đầu vào: {x1,x2,x3,x4}{y1,y2,y3,y4}. Trả về Indeterminatekhi bốn điểm nằm trên một vòng tròn chung, và 1nếu không.

Từ bốn điểm , giải pháp này xây dựng ma trận bên dưới:(x1,y1),(x2,y2),(x3,y3),(x4,y4)

[x12+y12x22+y22x32+y32x42+y42x1x2x3x4y1y2y3y41111]

Hệ số xác định của ma trận này là 0 khi và chỉ khi bốn hàng phụ thuộc tuyến tính và phụ thuộc tuyến tính giữa các hàng giống như phương trình của một vòng tròn thỏa mãn ở cả bốn điểm.

Cách ngắn nhất tôi có thể nghĩ đến để kiểm tra xem yếu tố quyết định là 0 hay không là nâng nó lên sức mạnh thứ 0: 0^0Indeterminatetrong khi mọi thứ khác mang lại 1.


10

Python 3 , 70 byte

lambda b,c,d,e,a=abs:a(a(b-d)*a(c-e)-a(b-c)*a(d-e)-a(c-d)*a(b-e))<1e-8

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

Tôi sử dụng định lý Ptolemy .

Trong một hình tứ giác, nếu tổng các sản phẩm của hai cặp cạnh đối diện của nó bằng tích của các đường chéo của nó, thì tứ giác có thể được ghi trong một vòng tròn.

b, c, d, eLà những con số phức tạp.


8

Perl 6 , 44 byte

{!im ($^b-$^a)*($^d-$^c)/(($d-$a)*($b-$c)):}

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

Lấy các đỉnh là số phức. Sử dụng thực tế là tổng các góc đối diện là 180 ° trong một tứ giác tuần hoàn. Thứ tự các hoạt động phải đảm bảo rằng các phép toán dấu phẩy động mang lại kết quả chính xác cho các số nguyên (đủ nhỏ).

Giải pháp TI-Basic của cảng Misha Lavrov, 33 byte

{![*](map */*,($_ Z-.rotate)).im}

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


42? Nó vẫn chính xác chứ?
Jo King

1
@JoKing Không, không phải vậy .
nwellnhof

Đại tràng làm gì trong trường hợp này? Đó chắc chắn không phải là một nhãn hiệu, và cũng không phải là một cuộc gọi phương thức.
dùng202729

@ user202729 Đây một cuộc gọi phương thức với cú pháp gián tiếp gián tiếp .
nwellnhof

6

JavaScript (ES6)

Kiểm tra các góc, 114 byte

[x1,y1,x2,y2,x3,y3,x4,y4]

a=>(F=i=>(A=Math.atan2)(a[i+3&7]-(y=a[i+1]),a[i+2&7]-a[i])-A(a[i+5&7]-y,a[i+4&7]-a[i]))(0)+F(2)+F(4)+F(6)==Math.PI

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


Tính toán một định thức, 130 byte

[x1,x2,x3,x4][y1,y2,y3,y4]

Câu hỏi này tương đương với câu trả lời thứ 2 của MishaLavrov , với ma trận xoay.

x=>y=>!(g=a=>a+a?a.reduce((v,[r],i)=>v+(i&1?-r:r)*g(a.map(r=>r.slice(1)).filter(_=>i--)),0):1)(x.map((X,i)=>[1,Y=y[i],X,X*X+Y*Y]))

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


6

TI-Basic (sê-ri 83), 21 byte

e^(ΔList(ln(ΔList(augment(Ans,Ans
not(imag(Ans(1)Ans(3

Đưa đầu vào thành một danh sách gồm bốn số phức Ans. Trả về 1nếu tứ giác có chu kỳ và 0ngược lại.

z1,z2,z3,z4

  • ΔList(augment(Ans,Ansz2z1,z3z2,z4z3,z1z4
  • e^(ΔList(ln(z3z2z2z1,z4z3z3z2,z1z4z4z3,
  • z3z2z2z1z1z4z4z3 (z3,z1;z2,z4)=z2z3z2z1:z4z3z4z1

Tôi đã làm hết sức để kiểm tra xem lỗi số có phải là vấn đề không và có vẻ như không, nhưng nếu có ai có trường hợp kiểm tra tốt cho điều đó, xin vui lòng cho tôi biết.


3

JavaScript (ES6) (101 byte)

p=>(h=(a,b)=>Math.hypot(p[a]-p[b],p[a+1]-p[b+1]))&&((h(2,4)*h(0,6)+h(0,2)*h(4,6)-h(0,4)*h(2,6))<1e-8)

Lấy đầu vào là [x1,y1,x2,y2,x3,y3,x4,y4], xuất ra Boolean.

ef=ac+bd
e,fa,b,c,d

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


2

Thạch , 11 byte

²Sṭ;L€€ṖÆḊ¬

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

Sử dụng phương pháp xác định từ giải pháp Mathicala của Misha Lavrov . Đầu ra 1 cho đúng, 0 cho sai.

Làm thế nào nó hoạt động

²Sṭ;L€€ṖÆḊ¬  Main link (monad). Input: [[x1,x2,x3,x4], [y1,y2,y3,y4]]
²S           Square each scalar and add row-wise; [x1*x1+y1*y1, ...]
  ṭ          Append to the input
   ;L€€      Add two rows of [1,1,1,1]'s
       Ṗ     Remove an extra row
        ÆḊ¬  Is the determinant zero?

Thạch , 12 byte

Iµ÷×ƭ/÷SµḞ=A

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

Sử dụng phương pháp tỷ lệ chéo phức tạp từ giải pháp TI-Basic của Misha Lavrov . Đầu ra 1 cho đúng, 0 cho sai.

Làm thế nào nó hoạt động

Iµ÷×ƭ/÷SµḞ=A  Main link (monad). Input: list of four complex numbers [z1,z2,z3,z4]
I             Increments; [z2-z1, z3-z2, z4-z3]
 µ            Refocus on above for sum function
  ÷×ƭ/÷S      (z2-z1)÷(z3-z2)×(z4-z3)÷(z4-z1)
        µ     Refocus again
         Ḟ=A  (real part) == (norm) within error margin
              i.e. imag part is negligible?

Tôi tin rằng cả hai đều có thể chơi gôn ...


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.