Re: \arcと同じオプションで点線の円弧を描く

名前: .
日時: 2005-07-19 23:30:01
IPアドレス: 220.214.19.*

>>36948 >角度が度数,方向が正ということなので方向を変えるために >(中略) >曲線の向きは変わりますけど,得られる結果は同じです. >度数とラジアンに関しては変換すればよいだけでしょう 結局,そういうところになりますね. # いまどきは“PSTricks を使うのが早い”で # 済ますこともできるでしょうけれども. もちろん,手動で換算後のパラメータを与えるのは面倒ですから, ユーザが指定したパラメータを内部処理用のマクロ(ここでは 13711 で定義されたままの \dottedarc)が必要とするパラメータに 換算した上で内部処理用のマクロを呼び出すラッパーを作るのが手軽でしょう. ただ,ここでは 13711 のマクロに計算ミスと思しき箇所が見つかりましたので, ついでにそこにも手を入れることにして,13711 のマクロを直接再定義してみます. # パラメータの意味に注意して,オリジナルと比較するとよいでしょう. \documentclass{article} \usepackage{trig} \makeatletter \def\dottedarc{\@testopt\@dottedarc{25}} \def\@dottedarc[#1]#2#3#4{% %%% #1: number of dots (> 1), #2: diameter %%% #3: start angle, #4: stop angle (#4 > #3) \count@#1\relax \ifnum \count@<\tw@ \count@\tw@ \fi \@tempcnta\z@ \@tempcntb\count@ \advance\@tempcntb\m@ne %%% \@tempdima#3\p@ \@tempdimb#4\p@%%% original \@tempdima-#4\p@ \@tempdimb-#3\p@%%% modified: %%% 角度を測る向きが逆になったので開始角と終了角に - をつけ, %%% それに伴いそれらの大小関係も逆になるので \@tempdima と %%% \@tempdimb に代入する値を入れ換える. \dimen@\@tempdimb \advance\dimen@-\@tempdima \ifdim\dimen@>6.2831853\p@%%% 1 回転を超える場合の処理(360 を 2pi に変更) \@tempdimb\@tempdima \advance\@tempdimb 6.2831853\p@ \fi \@whilenum\@tempcnta<\count@\do{% \dimen@\@tempdimb \advance\dimen@-\@tempdima %%% \divide\dimen@\count@%%% original \divide\dimen@\@tempcntb%%% modified: おそらく計算ミス \multiply\dimen@\@tempcnta \advance\dimen@\@tempdima \dimen@57.29578\dimen@%%% added: ラジアンを度に換算 \edef\@tempa{% \noexpand\CalculateSin{\strip@pt\dimen@}% \noexpand\CalculateCos{\strip@pt\dimen@}% \dimen@#2\p@ \divide\dimen@\tw@%%% added: 直径を半径に換算 \dimen@ii\noexpand\UseSin{\strip@pt\dimen@}\dimen@ \dimen@\noexpand\UseCos{\strip@pt\dimen@}\dimen@}% \@tempa \edef\@tempa{\noexpand\put(\strip@pt\dimen@,\strip@pt\dimen@ii)}% \@tempa{\unitlength\p@\circle*{1}}% \advance\@tempcnta\@ne}} \makeatother \begin{document} \begin{picture}(100,100) \put(50,50){\dottedarc[35]{100}{0}{1}} \put(50,50){\dottedarc{60}{-1.57}{0}} \put(50,50){\dottedarc{30}{-.75}{2.25}} \end{picture} \end{document}

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます)