単純な座標系ではなく、黄金の座標系

ペンローズのモザイクの1つでは、角度が異なる2つの菱形のみが使用されます。 これらの要素から、任意のサイズの非周期的なモザイクを構築できます。 それを表示するために、座標を分析的に提供しようとしました。

画像

一方の菱形の角度の分布は、1:4、36°:144°、他の2:3、72°:108°です。 菱形の角度は、1回転の10分の1の倍数、36°です。

通常の十角形の角の座標を定義します。

学位cos
010
360.8090170.587785
720,3090170.951056


画像

残りは対称的で、符号のみが変わります。

角度36°と72°の余弦が0.5異なることがすぐにわかります。 これは非常に重要な事実です!

座標の絶対値は、横座標と縦座標の両方で正確に3つの部分です。 3つすべては、整数係数を持つ2つの係数として表すことができます。

横座標の場合、これは簡単です。値の中にはゼロがあり、これはゼロ係数で表されます。 縦座標の中で、3番目の単位は他の2つに比例しません。 しかし、座標の差は0.5なので、この差は係数の1つになり、2番目の係数はより小さな値になります。 値1は2の係数で取得されます。

* 36°xy
C xa = 0.5C xb = 0.309017C ya = 0.951056C xb = 0.587785
02000
11101
20110
30-110
4-1-101
5-2000
6-1-10-1
70-1-10
801-10
9110-1


そして、それは整数座標系があることを意味します。

\ {x_1、x_2、y_1、y_2 \} =(C_ {xa} x_1 + C_ {xb} x_2、C_ {ya} y_1 + C_ {yb} y_2)

画像

係数は同じ係数でペアごとに異なります。これは黄金比の比率です。

Cxb= varphiCxa

Cyb= varphiCya

 varphi= frac sqrt512

係数の正確な表現を導き出すことができます。

Cxa= frac12

Cxb= frac varphi2

Cya= frac sqrt3+ varphi2

Cyb= frac sqrt2 varphi2

次は、ゴールデンセクションの魔法です。

 varphi2=1 varphi

a+b varphi cdot varphi=a cdot varphi+b1 varphi=b+ab varphi

a+b varphi/ varphi=b+a+a varphi

3+ varphi2 varphi=6+2 varphi3 varphi varphi2=6 varphi1 varphi=5

したがって、多くのパターン:

自明:

Cxa cdotCxa=Cxa/2
Cxa cdotCxb=Cxb/2
Cxa cdotCya=Cya/2
Cxa cdotCyb=Cyb/2

係数の比率が等しいため:

Cxb cdotCya= varphi cdotCxa cdotCya= varphi cdotCya/2=Cyb/2
Cxb cdotCyb= varphi cdotCxa cdot varphi cdotCya=1 varphi cdotCya/2=CyaCyb/2

係数の二乗:

Cxb cdotCxb=1 varphi/4=CxaCxb/2
Cya cdotCya=3+ varphi/4=3Cxa+Cxb/2
Cyb cdotCyb=2 varphi/4=2CxaCxb/2

アートワーク:

Cya cdotCyb= sqrt3+ varphi2 varphi/4= sqrt5/4=1+2 varphi/4=Cxa+2Cxb/2

これらのプロパティに基づいて、ベクトルの整数乗算の行列を作成できます。

const crd vmul[16] = { { 1, 0, 0, 0}, { 0, 1, 0, 0}, { 0, 0, 1, 0}, { 0, 0, 0, 1}, { 0, 1, 0, 0}, { 1,-1, 0, 0}, { 0, 0, 0, 1}, { 0, 0, 1,-1}, { 0, 0, 1, 0}, { 0, 0, 0, 1}, {-3,-1, 0, 0}, {-1,-2, 0, 0}, { 0, 0, 0, 1}, { 0, 0, 1,-1}, {-1,-2, 0, 0}, {-2, 1, 0, 0} }; 

そして、すべての乗算は

 int* vm = (int*)vmul; for(int i = 0; i < 4; i++) for(int j = 0; j < 4; j++) for(int k = 0; k < 4; k++) v3[k] += v1[i] * v2[j] * vm[(i * 4 + j) * 4 + k]; 

このシステムのベクトル単位は{2,0,0,0}として表されます。 そのようなユニットの単純な転置の後、{4,0,0,0}を取得します。 したがって、係数の各式にあった2つへの分割は、正規化として個別に行われます。

 for(int i = 0; i < 4; i++) v3[i] /= 2; 

この座標系の特徴は、与えられた精度で平面全体をカバーすることです。 任意の数のステップを繰り返して、10方向のいずれかを選択し、整数座標のままにすることができます。

しかし、座標のすべての組み合わせが開始位置から到達可能な場所を決定するわけではありません。

座標の展開の1ステップについては、次のとおりです:{2,0,0,0}、{1,1,0,1}、{0,1,1,0}、{0、-1,1,0}、{ -1、-1,0,1}、{-2,0,0,0}、{-1、-1,0、-1}、{0、-1、-1,0}、{0、 1、-1.0}、{1,1.0、-1}。 これらの手順の任意の組み合わせが有効です。

単一のステップ{2,0,0,0}の組み合わせとともに
{0,1,1,0}-{0,1、-1,0} = {0,0,2,0}、
{1,1,0,1}-{1,1,0、-1} = {0,0,0,2}、
{1,1,0,1} + {1,1,0、-1}-{2,0,0,0} = {0,2,0,0}
つまり、任意の単一の座標を2ずらすことができるため、到達可能性は座標のグループパリティによってのみ影響を受けます。 達成可能な組み合わせは4つあります:ゼロ:{0,0,0,0}、単一ステップから:{1,1,0,1}、{0,1,1,0}、およびそれらの組み合わせ:{1,0、 1,1}。

ご覧のように、横座標のグループパリティは、縦座標のグループパリティと一意に相互接続されています。 これは、垂直座標が4つのタイプに分割され、水平座標も4つのタイプに分割され、ポイントが正しく結合された場合にのみ座標系に属することを意味します。

画像


任意の点に近づくには、グループパリティを考慮して、各座標を適切な整数因子に分解する必要があります。

一般に、整数の座標値と36度の回転を組み合わせた座標系があります。 彼女を連れ出したとき、私は彼女のことを前に知らなかったことに驚きました。 しかし今、彼女に関する記事がHabréにあります。

\ frac {{\ displaystyle \ frac {5- \ sqrt5} {5+ \ sqrt5}}-\ sqrt {\ displaystyle \ frac {5+ \ sqrt5} {5- \ sqrt5}} {\ displaystyle \ frac { 5+ \ sqrt5} {5- \ sqrt5} + \ sqrt {\ frac {5- \ sqrt5} {5+ \ sqrt5}} + \ frac {5- \ sqrt5} {5+ \ sqrt5} = 0



 frac5 sqrt55+ sqrt5+ sqrt frac5 sqrt55+ sqrt5overset1= frac5+ sqrt55 sqrt5 sqrt frac5+ sqrt55 sqrt5

Source: https://habr.com/ru/post/J342556/


All Articles