นี่เป็นวัฏจักรรูปสี่เหลี่ยมหรือไม่?


18

ในวิชาคณิตศาสตร์รูปสี่เหลี่ยมขนมเปียกปูนเป็นวงกลมที่มีจุดยอดทั้งหมดอยู่ในวงกลมเดียวกัน กล่าวอีกนัยหนึ่งทุกจุดสุดยอดอยู่ในวงกลมของอีกสามคน สำหรับข้อมูลเพิ่มเติมโปรดดูบทความแม ธ เวิลด์

ตัวอย่าง

quadrilaterals เหล่านี้เป็นวัฏจักร:

วงจรรูปสี่เหลี่ยม

สี่เหลี่ยมคางหมูนี้ไม่ได้เป็นรอบ

รูปสี่เหลี่ยมคางหมู

(ภาพจาก Wikipedia)

วัตถุประสงค์

ให้พิกัดของจุดยอดสี่จุดตามลำดับทวนเข็มนาฬิกาซึ่งเป็นรูปสี่เหลี่ยมนูนออกมาตรวจสอบว่ารูปสี่เหลี่ยมเป็นรูปวงกลมหรือไม่

พิกัดจะเป็นจำนวนเต็ม (หมายเหตุอย่างไรก็ตามพิกัด circumcenter และ circumradius นั้นไม่จำเป็นต้องเป็นจำนวนเต็ม) ตามที่กล่าวไว้ในวรรคก่อนหน้านี้ไม่มีสามจุดที่จะเป็นแบบเชิงเส้นร่วมและไม่มีความบังเอิญสองแบบ

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

ภาษา Wolfram (Mathematica)ขนาด 23 ไบต์

#∈Circumsphere@{##2}&

ลองออนไลน์!

ใช้เวลาสี่ปัจจัยการผลิต: รายการ{x1,y1}, {x2,y2}, และ{x3,y3} {x4,y4}ตรวจสอบว่าจุดแรกอยู่บนวงกลมของอีกสามคน ยังใช้งานได้สำหรับการตรวจสอบถ้าคะแนนในมี concyclic ให้สุดท้ายของพวกเขาเป็นอิสระ affinely (เพราะเป็นเรื่องน่าเศร้าถ้าคุณให้มันใส่คนเลว)n+1RnnCircumsphere

อีกวิธีหนึ่งคือวิธีการทางคณิตศาสตร์:

ภาษา Wolfram (Mathematica) , 29 28 25 24 ไบต์

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

ลองออนไลน์!

ใช้เวลาสองรายการเป็น input: และ{x1,x2,x3,x4} {y1,y2,y3,y4}ส่งคืนIndeterminateเมื่อจุดสี่จุดอยู่บนวงกลมทั่วไปและเป็น1อย่างอื่น

จากสี่จุดโซลูชันนี้สร้างเมทริกซ์ด้านล่าง:(x1,Y1),(x2,Y2),(x3,Y3),(x4,Y4)

[x12+Y12x22+Y22x32+Y32x42+Y42x1x2x3x4Y1Y2Y3Y41111]

ดีเทอร์มีแนนต์ของเมทริกซ์นี้คือ 0 ถ้าหากสี่แถวนั้นขึ้นอยู่กันเป็นเส้นตรงและการพึ่งพาเชิงเส้นระหว่างแถวนั้นเป็นสิ่งเดียวกันกับสมการของวงกลมที่พอใจทั้งสี่จุด

ทางที่สั้นที่สุดที่ฉันสามารถคิดเพื่อตรวจสอบว่าปัจจัยเป็น 0 คือการสร้างมันไป 0-อำนาจ th: 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 ของพอร์ตของ Misha Lavrov ขนาด 33 ไบต์

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

ลองออนไลน์!


42? มันยังถูกต้องหรือไม่
Jo King

1
@JoKing ไม่มีก็ไม่ได้
nwellnhof

ลำไส้ใหญ่ทำอะไรในกรณีนี้ มันไม่ใช่ฉลากแน่นอนและไม่ใช่วิธีการโทร
user202729

@ user202729 มันเป็นวิธีการเรียกด้วยไวยากรณ์ invocant ทางอ้อม
nwellnhof

6

JavaScript (ES6)

ทดสอบมุม, 114 ไบต์

[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

ลองออนไลน์!


การคำนวณดีเทอร์มิแนนต์ 130 ไบต์

[x1,x2,x3,x4][Y1,Y2,Y3,Y4]

อันนี้เทียบเท่ากับคำตอบที่ 2 ของ MishaLavrovโดยมีเมทริกซ์หมุน

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 series), 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

ฉันพยายามอย่างเต็มที่เพื่อตรวจสอบว่าข้อผิดพลาดเชิงตัวเลขเป็นปัญหาหรือไม่ แต่ถ้าใครมีกรณีทดสอบที่ดีโปรดแจ้งให้เราทราบ



2

เยลลี่ 11 ไบต์

²Sṭ;L€€ṖÆḊ¬

ลองออนไลน์!

ใช้วิธีการที่ปัจจัยจากการแก้ปัญหา Mathematica Misha Lavrov ของ เอาต์พุต 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

ลองออนไลน์!

ใช้วิธีการข้ามอัตราส่วนที่ซับซ้อนจากMisha Lavrov วิธีการแก้ปัญหา เอาต์พุต 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?

ฉันเชื่อว่าทั้งสองเล่นได้ ...


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.