Bu dörtgen döngüsel mi?


18

Matematikte, döngüsel bir dörtgen , köşeleri aynı daire üzerinde olan bir dörtlüdür. Başka bir deyişle, her köşe diğer üçün çemberindedir. Daha fazla bilgi için MathWorld makalesine bakın .

Örnekler

Bu dörtgenler döngüseldir:

Devirli dörtgenler

Bu yamuk döngüsel değildir.

Yamuk

(Wikipedia'dan görüntüler)

Amaç

Dışbükey bir dörtgen oluşturan dört köşenin koordinatları saat yönünün tersine verildiğinde, dörtgenlerin döngüsel olup olmadığını belirleyin.

Koordinatlar tamsayılar olacaktır (ancak, çevresel koordinatların ve çemberlerin mutlaka tamsayı olmadığına dikkat edin.) Önceki paragrafta ima edildiği gibi, üç nokta eş-doğrusal olmayacak ve iki tesadüf olmayacaktır.

I / O

Herhangi bir makul formatı kullanarak girdi alabilirsiniz. Özellikle, [[x1,x2,x3,x4],[y1,y2,y3,y4]], [[x1,y1],[x2,y2],[x3,y3],[x4,y4]]ve karmaşık sayılar tüm iyi.

Doğru ve yanlış için farklı tutarlı değerler kullanarak çıktı alın.

Test senaryoları

Doğru:

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

Yanlış:

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

Yanıtlar:


11

Wolfram Dili (Mathematica) , 23 bayt

#∈Circumsphere@{##2}&

Çevrimiçi deneyin!

Dört girişi Alır: listeleri {x1,y1}, {x2,y2}, {x3,y3}, ve {x4,y4}. İlk noktanın diğer üçünün çember üzerinde olup olmadığını kontrol eder. Ayrıca kontrol için çalışır n+1 noktaları R,n concyclic son verilen, n bunlardan (çünkü affinely bağımsızdır Circumspherebunu dejenere girdi verirsen üzücü).

Alternatif olarak, burada matematiksel bir yaklaşım vardır:

Wolfram Dili (Mathematica) , 29 28 25 24 bayt

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

Çevrimiçi deneyin!

Girdi olarak iki liste alır: {x1,x2,x3,x4}ve {y1,y2,y3,y4}. IndeterminateDört nokta ortak bir dairede olduğunda döndürür , 1aksi halde.

Dört noktadan (x1,y1),(x2,y2),(x3,y3),(x4,y4) , bu çözüm aşağıdaki matrisi oluşturur:

[x12+y12x22+y22x32+y32x42+y42x1x2x3x4y1y2y3y41111]

Bu matrisin determinantı sadece ve sadece dört sıra doğrusal olarak bağımlıysa ve sıralar arasındaki doğrusal bağımlılık dört noktanın tamamında tatmin olan bir dairenin denklemi ile aynı ise 0'dır.

Belirleyici 0 olup olmadığını kontrol etmek düşünebildiğim en kısa yoldur 0-inci güce bunu yükseltmektir: 0^0olduğu Indeterminatebaşka bir şey verir iken 1.



8

Perl 6 , 44 bayt

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

Çevrimiçi deneyin!

Köşeleri karmaşık sayılar olarak alır. Döngüsel bir dörtgende zıt açıların toplamının 180 ° olduğu gerçeğini kullanır. İşlem sırası, kayan nokta işlemlerinin (yeterince küçük) tamsayılar için kesin bir sonuç vermesini garanti etmelidir.

Misha Lavrov'un TI-Basic çözümü, 33 bayt

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

Çevrimiçi deneyin!


42? Hala doğru mu?
Jo King

1
@JoKing Hayır, değil .
nwellnhof

Kolon bu durumda ne yapar? Kesinlikle bir etiket değil, aynı zamanda bir yöntem çağrısı da değil.
user202729

@ user202729 O olduğu bir yöntem çağrısı dolaylı invocant sözdizimi .
nwellnhof

6

JavaScript (ES6)

Açıların test edilmesi, 114 bayt

[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

Çevrimiçi deneyin!


Bir determinantın hesaplanması, 130 bayt

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

Bu , döndürülmüş bir matris ile MishaLavrov'un 2. cevabına eşdeğerdir .

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

Çevrimiçi deneyin!


6

TI-Basic (83 serisi), 21 bayt

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

Girdiyi dört karmaşık sayının listesi olarak alır Ans. 1Dörtgenlerin döngüsel olup olmadığını döndürür 0.

z1,z2,z3,z4

  • ΔList(augment(Ans,Ansz2-z1,z3-z2,z4-z3,z1-z4
  • e^(ΔList(ln(bunun oranlarını hesaplamasız3-z2z2-z1,z4-z3z3-z2,z1-z4z4-z3,...
  • Birinci ve üçüncü terimlerin çarpımının olup olmadığını kontrol ederiz.z3-z2z2-z1z1-z4z4-z3 (z3,z1;z2,z4)=z2-z3z2-z1:z4-z3z4-z1

Sayısal hatanın bir sorun olup olmadığını kontrol etmek için elimden geleni yaptım ve öyle görünmüyor, ancak bunun için iyi test durumları varsa lütfen bana bildirin.


3

JavaScript (ES6) (101 bayt)

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)

Girdi olarak alır [x1,y1,x2,y2,x3,y3,x4,y4], bir Boole çıktısı alır.

ef=birc+bd
e,fbir,b,c,d

Çevrimiçi deneyin!


2

Jöle , 11 bayt

²Sṭ;L€€ṖÆḊ¬

Çevrimiçi deneyin!

Misha Lavrov'un Mathematica çözümünün belirleyici yaklaşımını kullanır . Çıkışlar için 1 doğru, 0 için yanlış.

Nasıl çalışır

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

Jöle , 12 bayt

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

Çevrimiçi deneyin!

Misha Lavrov'un TI-Basic çözeltisinden kıvrık çapraz oran yaklaşımını kullanır . Çıkışlar için 1 doğru, 0 için yanlış.

Nasıl çalışır

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?

Her ikisinin de golf oynayabileceğine inanıyorum ...


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.