スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Asymptoteで立体の輪郭を描く(2)

前回、Asymptoteを使用して球を描いた。その時の図をよく見ると、点 \((0,0,1)\) が球の輪郭に接しているのが分かる。視点がXY平面の上側にあることを考えると、これはおかしいのではないか。実際、次のようにコードを変更して再描画すると、描かれる輪郭と球の輪郭が一致しないことが分かる:

// 球(回転体)の輪郭を描く
// longitudinalbackpenは球の下半分のペンを指定するようだ
draw(s,m=11,longitudinalbackpen=currentpen+solid);
polar2

ソースコードの該当部分はbase/solids.asyの280行目以降で定義されているrevolution.longitudinal()なのでこれを修正すればいいのだが、そんな面倒なことをしなくても立体の輪郭の描画にrevolution.silhouette()を用いれば良い。

// 球(回転体)の輪郭を描く
// longitudinalbackpenは球の下半分のペンを指定するようだ
draw(s.silhouette());
draw(s,m=11,longitudinalpen=nullpen,longitudinalbackpen=nullpen);
asymptote-polar3.png

ただしこの場合

warning [2Dsilhouette]: silhouette routine is intended only for 2d projections

という警告が出る。本来はやはり前回のようにdraw()を使って描画するべきなのだろう。しかし、なぜsilhouette()は問題ないのにlongitudinal()はバグ持ちなのだろうか。もしかして、これは意図した動作だったりするのだろうか。謎だ。

スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

minoki

Author:minoki
好きなプログラミング言語:
Haskell,Lua
GitHubアカウント
Twitter

最新記事
月別アーカイブ
カテゴリ
検索フォーム
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。