阪本ひろむ氏から(その56)についての追加コメントが届いたので紹介する.
===================================
すでに,これまでの方法でうまく描画できない理由として浮動小数点のアンダーフローの話をしたが,
r^(n/2)=cos(n/2・t)
の場合,他に事情がある.
プロットする区間はtが[0,2π]である.プロット関数はこの区間をt0,t1,t2,・・・と適当に分割し,その後,点r(t0),r(t1),r(t2),・・・を結合して曲線を描く.
ところが,この場合,r=0となるtの付近でのrの変化は非常に大きく
dr/dt=±∞
である.よって,区間をどのように細分しても,これらのtjに対して,r(tj)=0となる点がないのである.
tj-1までrは実数値,tjで虚数となる場合,描画はtj-1のところで途切れてしまう.tj-1までrは虚数値,tjで実数となる場合,描画はtjから始まる.よって,r=0の付近での描画はできない.
そこで,
r=cos(n/2・t)^2/n cos(n/2・t)≧0のとき
r=0 cos(n/2・t)<0のとき
なる条件を加えて,r=0までの描画をせざるを得ないのである.
ところで,今回のケースでは,ある区間でr=0という条件を設定できた.そうでない場合,たとえば,
r=cos(n/2・t)^2/n cos(n/2・t)≧0のとき
r=(−cos(n/2・t))^2/n cos(n/2・t)<0のとき
とした場合,この手はもはや通用しない(n/2が偶数の場合,この式が正解).やはりr=0付近での描画はうまくできない.このような場合は
[1]r≧0となる区間をあらかじめ設定しておく.
[2]それ以外のところで,r=0となるように関数を定義.
[3]これらのプロット図を重ね合わせるという方法をとることになる.
===================================