あなたが数学者ならクリスマスツリーを作る方法

2021年のHabrとHabrazhateliに明けましておめでとうございます。気取らない、心地よい機能的なクリスマスツリー(fYolka)を私たち全員にプレゼントしてください。この記事では、モニター上でクリスマスツリーを10分で作成する方法を説明します。2番目の記事では、雪だるまを「成形」し、木の下にギフトを置き、その上に雪をまぶす方法について説明します。





基本的な考え方

図全体は、xとyの2つの引数からの数学関数のセットです。それらはすべて、何らかの形でSDFに基づいています。Desmos.comを使用してグラフを描画しました





基本機能

ゼロ制限

x + \左| x \右|





楕円

\ frac {\左(x-2 \右)^ {2}} {3} + \ frac {\左(y-3 \右)^ {2}} {1} = 1

クリスマスツリー

ツリーの基礎を説明しましょう

-\左(y-13 \右)-2 \左| x \右| = 0

ブランチを追加する

-0.2 \ cos \ left(6.8y \ right)\ left(y-13 \ right)-2 \ left | x \ right | = 0

枝の先端を地面に持ってきてください

-0.2 \ cos \ left(6.8y + 0.7 \ left | x \ right | \ right)\ left(y-13 \ right)-2 \ left | x \ right | = 0

スプルースを上から制限します

-0.2 \ cos \ left(6.8y + 0.7 \ left | x \ right | \ right)\ left(y-13 \ right)-2 \ left | x \ right | -0.51 \ left(y + \ left | y \右| \右)= 0

スプルースが下に移動しました。これは後で修正されます





平行ストローク:下からの制限

リミッタ





2x = 5 \左(y- \左| y-2 \右| \右)





この段階の結果





-0.2 \ cos \ left(6.8y + 0.7 \ left | x \ right | \ right)-2 \ left | x \ right | +5 \ left(y- \ left | y-2 \ right | \ right)= 0





組み合わせる

-0.2 \ cos \ left(6.8y + 0.7 \ left | x \ right | \ right)\ left(y-13 \ right)-2 \ left | x \ right | -0.51 \ left(y + \ left | y \右| \右)+5 \左(y- \左| y-2 \右| \右)= 0

最後の仕上げ

2-0.2 \ cos \ left(6.8y + 0.7 \ left | x \ right | \ right)\ left(y-13 \ right)-2 \ left | x \ right | -0.51 \ left(y + \ left | y \右| \右)+5 \左(y- \左| y-2 \右| \右)= 0

トランクに対処しましょう

角が鋭い楕円

\ 0.1x ^ {10} +30 \左(y-1 \右)^ {10} -1 = 0

オブジェクトを組み合わせる

ユニオン、交差、カットは、最も単純な最小(a、b)操作に基づいています。aとbの前の符号に応じて、異なるブール演算が取得されます。





葉-a(xy)、トランク-b(xy)

-a \ le0、b \ le0

最終

\ min \ left(-a、b \ right)\ le0





desmos.comに埋め込むすべての式

a = 2-0.2 \ cos \ left(6.8y + 0.7 \ left | x \ right | \ right)\ left(y-13 \ right)-2 \ left | x \ right | -0.51 \ left(y + \ left | y \右| \右)+5 \左(y- \左| y-2 \右| \右)





b \ = \ 0.1x ^ {10} +30 \左(y-1 \右)^ {10} -1





\ min \ left(-a、\ b \ right)\ le0





つづく...








All Articles