この四辺形は周期的ですか?


18

数学では、周期的な四辺形は頂点がすべて同じ円上にあるものです。つまり、すべての頂点は他の3つの外接円上にあります。詳細については、MathWorldの記事を参照してください

これらの四辺形は周期的です。

周期的な四辺形

この台形は周期的ではありません。

台形

(ウィキペディアの画像)

目的

凸四辺形を形成する反時計回りの順序で4つの頂点の座標が与えられたら、四辺形が周期的であるかどうかを判断します。

座標は整数になります(ただし、外心座標と外接半径は必ずしも整数ではないことに注意してください)。前の段落で暗示されているように、3つのポイントが同一直線上になく、2つが一致しません。

I / O

適切な形式を使用して入力できます。、特に[[x1,x2,x3,x4],[y1,y2,y3,y4]][[x1,y1],[x2,y2],[x3,y3],[x4,y4]]複素数のすべての罰金です。

trueとfalseの異なる一貫した値を使用して出力します。

テストケース

正しい:

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

オンラインでお試しください!

リスト:4つの入力を取り{x1,y1}{x2,y2}{x3,y3}、と{x4,y4}。最初の点が他の3つの外接円上にあるかどうかを確認します。また、R nのn+1ポイントが共環であるかどうかをチェックするために機能します。ただし、それらの最後のn個がアフィン的に独立している場合(退化した入力を与えると悲しいため)。RnnCircumsphere

あるいは、ここに数学的なアプローチがあります:

Wolfram言語(Mathematica)29 28 25 24バイト

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

オンラインでお試しください!

入力として2つのリストを取ります:{x1,x2,x3,x4}{y1,y2,y3,y4}Indeterminate4つのポイントが共通の円上にある1場合とそうでない場合に戻ります。

(x1,y1),(x2,y2),(x3,y3),(x4,y4)

[x12+y12x22+y22x32+y32x42+y42x1x2x3x4y1y2y3y41111]

この行列の行列式は、4つの行が線形依存であり、行間の線形依存性が4つすべての点で満たされる円の方程式と同じ場合にのみ0です。

行列が0であれば、私はチェックすると考えることができ、最短の方法は、0番目のパワーにそれを高めることです。0^0あるIndeterminate他の何かを与えている間1



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

この場合、コロンは何をしますか?これは間違いなくラベルではなく、メソッド呼び出しでもありません。
user202729

@ user202729これ間接呼び出し構文を使用したメソッド呼び出しです。
-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]

これは、MishaLavrovの2番目の答えに相当します。

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

入力を4つの複素数のリストとして取得しますAns1四辺形が周期的かどうかを返します0

z1,z2,z3,z4

  • ΔList(augment(Ans,Ansz2z1,z3z2,z4z3,z1z4
  • e^(ΔList(ln(その比率を計算しますz3z2z2z1,z4z3z3z2,z1z4z4z3,
  • z3z2z2z1z1z4z4z3 (z3,z1;z2,z4)=z2z3z2z1:z4z3z4z1

数値エラーが問題であるかどうかを確認するために最善を尽くしましたが、そうではないようですが、そのための良いテストケースがある場合はお知らせください。



2

ゼリー、11バイト

²Sṭ;L€€ṖÆḊ¬

オンラインでお試しください!

Misha LavrovのMathematicaソリューションの行列式アプローチを使用します。trueの場合は1、falseの場合は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のTI-Basicソリューションの複雑なクロスレシオアプローチを使用します。trueの場合は1、falseの場合は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.