Це циклічний чотирикутник?


18

У математиці циклічний чотирикутник - це той, чиї вершини лежать на одному колі. Іншими словами, кожна вершина знаходиться по колу інших трьох. Для отримання додаткової інформації дивіться статтю MathWorld .

Приклади

Ці чотирикутники є циклічними:

Циклічні чотирикутники

Ця трапеція не циклічна.

Трапеція

(Зображення з Вікіпедії)

Об'єктивна

Давши координати чотирьох вершин у порядку проти годинникової стрілки, які утворюють опуклий чотирикутник, визначте, чи є чотирикутник циклічним.

Координати будуть цілими числами (однак зауважте, що координати окружності та окружність не обов'язково є цілими числами). Як випливає з попереднього пункту, жодні три точки не будуть співлінійними та не збігаються двома.

I / O

Ви можете взяти дані, використовуючи будь-який розумний формат. Зокрема, [[x1,x2,x3,x4],[y1,y2,y3,y4]], [[x1,y1],[x2,y2],[x3,y3],[x4,y4]]і комплексні числа все в порядку.

Вивести з використанням будь-яких різних послідовних значень для істинних та хибних.

Тестові справи

Правда:

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

Помилковий:

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

Відповіді:


11

Мова Вольфрама (Mathematica) , 23 байти

#∈Circumsphere@{##2}&

Спробуйте в Інтернеті!

Приймає чотири входи: в списках {x1,y1}, {x2,y2}, {x3,y3}, і {x4,y4}. Перевіряє, чи перша точка лежить на окружному колі трьох інших. Також працює для перевірки, якщо н+1 балів у Rн є суперечливими, за умови останнього н з них адекватно незалежних (бо Circumsphereце сумно, якщо ви даєте йому вироджений вхід).

Як варіант, ось математичний підхід:

Мова Вольфрама (Mathematica) , 29 28 25 24 байт

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

Спробуйте в Інтернеті!

Приймає два списки в якості вхідних даних: {x1,x2,x3,x4}і {y1,y2,y3,y4}. Повертається, Indeterminateколи чотири точки знаходяться на загальному колі та в 1іншому випадку.

З чотирьох точок (х1,у1),(х2,у2),(х3,у3),(х4,у4)

[х12+у12х22+у22х32+у32х42+у42х1х2х3х4у1у2у3у41111]

Визначник цієї матриці дорівнює 0, якщо і тільки якщо чотири рядки лінійно залежні, а лінійна залежність між рядками - це те саме, що рівняння кола, яке задовольняється у всіх чотирьох точках.

Найкоротший спосіб, який я міг би придумати, щоб перевірити, чи визначальний показник дорівнює 0, це підняти його до 0-ї потужності: 0^0це в Indeterminateтой час, як все інше дає 1.


10

Python 3 , 70 байт

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

Спробуйте в Інтернеті!

Я використовую теорему Птолемея .

У чотирикутнику, якщо сума добутків двох його пар протилежних сторін дорівнює добутку його діагоналей, то чотирикутник можна вписати у коло.

b, c, d, eЄ комплексними числами.


8

Perl 6 , 44 байти

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

Спробуйте в Інтернеті!

Приймає вершини як складні числа. Використовує той факт, що сума протилежних кутів становить 180 ° у циклічному чотирикутнику. Порядок операцій повинен гарантувати, що операції з плаваючою комою дають точний результат для (досить малих) цілих чисел.

Рішення TI-Basic порта Міші Лаврова, 33 байти

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

Спробуйте в Інтернеті!


42? Це все ще точно?
Джо Кінг

1
@JoKing Ні, це не так .
nwellnhof

Що робить в цьому випадку товста кишка? Це точно не етикетка, а також не виклик методу.
користувач202729

@ User202729 Це є викликом методу з непрямим синтаксисом invocant .
nwellnhof

6

JavaScript (ES6)

Тестування кутів, 114 байт

[х1,у1,х2,у2,х3,у3,х4,у4]

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

Спробуйте в Інтернеті!


Обчислив визначник, 130 байт

[х1,х2,х3,х4][у1,у2,у3,у4]

Цей еквівалент другої відповіді Мішалаврова з обертовою матрицею.

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

Спробуйте в Інтернеті!


6

TI-Basic (83 серія), 21 байт

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

Приймає введення як список чотирьох складних чисел у Ans. Повертається, 1якщо чотирикутник циклічний та 0інший.

z1,z2,z3,z4

  • ΔList(augment(Ans,Ansz2-z1,z3-z2,z4-z3,z1-z4
  • e^(ΔList(ln(z3-z2z2-z1,z4-z3z3-z2,z1-z4z4-z3,.
  • Перевіряємо, чи добуток першого та третього доданків, який є z3-z2z2-z1z1-z4z4-z3, не має уявної частини. Зауважте, що це те саме, що перехресне співвідношення (z3,z1;z2,z4)=z2-z3z2-z1:z4-z3z4-z1.

Я зробив все можливе, щоб перевірити, чи є помилка числення проблемою, і, здається, це не так, але якщо хтось має для цього хороші тестові випадки, будь ласка, дайте мені знати.


3

JavaScript (ES6) (101 байт)

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)

Приймає введення як [x1,y1,x2,y2,x3,y3,x4,y4], виводить булевий.

Перевірено на основі

еf=аc+бг
де е,f є діагоналями і а,б,c,г сторони в порядку.

Спробуйте в Інтернеті!


2

Желе , 11 байт

²Sṭ;L€€ṖÆḊ¬

Спробуйте в Інтернеті!

Використовує визначальний підхід з рішення математики Міші Лаврова . Виходи 1 для істинного, 0 для хибного.

Як це працює

²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?

Желе , 12 байт

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

Спробуйте в Інтернеті!

Використовується спільний перехресний підхід із рішення TI-Basic Міші Лаврова . Виходи 1 для істинного, 0 для хибного.

Як це працює

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?

Я вважаю, що обидва є головними ...


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.