point A=Pt(-0.050,-0.390,color4); point B=Pt(1.270,-0.400,color4); line a=Join(A,B); point D=Pt(-0.240,1.510,color4); point E=Pt(-1.310,1.240,color4); circle C2=Circle(D,E); point F=PtOnCircle(C2,1.253,color4); line c=Join(F,D); point G=Meet(c,a,color4); circle C1=Compass(A,B,G); point J=PtOnLine(A,B,4.569,-3.249,color4); line d=3PBisector(J,G,F); point K=MeetCircleAndLine(C1,d,-0.392,0.000,-1.460,0.000,color4); point L=MeetCircleAndLine(C1,d,1.164,0.000,0.673,0.000,color4,notK); curve x1=OrbitOnCircle(F,K);
でもバグ。軌跡はそんなに間違っていない。変なのはKとLのポジション、ころころ入れ替わったり合流したりする。
直せるかどうか微妙だが、原因はわかった。つまり、軌跡を描く間に、KとLとが入れ替わってしまうことがあるようなのだ。つまり、軌跡を描く間に、KとLは都合2回無限遠に飛んでしまう。そこで位相がこっそり入れ替わってたりするのだ。今年中になおしたい!
(12月31日)あはら
(12月31日)あはら
2箇所変更して、とりあえずバグは収まった。第1点は、Evaluate_MeetCL(円と直線の交点のevaluate)において、交点たちが大きくジャンプ(たとえば無限遠点の近くを通り過ぎた場合)するときには、2交点の相対位置から次のポジションを決めるようにした。これで、上記「入れ替わり」バグは起きなくなった。
もう1点は前から直そうと思っていたところだが、「3点で決まる角の2等分線」の場合、3点が1直線上に並ぶときに0x+0y+0=0の式になってしまっていたこと。これをなおした。真ん中の点からみて、二つのベクトル方向の単位ベクトルを求め、これまではその和を取っていたが、和が0ベクトルになってしまうことがあるのが問題。そこで、適度に場合分けして、差のベクトルを法線ベクトルとして書くようにした。
(1月2日阿原)
もう1点は前から直そうと思っていたところだが、「3点で決まる角の2等分線」の場合、3点が1直線上に並ぶときに0x+0y+0=0の式になってしまっていたこと。これをなおした。真ん中の点からみて、二つのベクトル方向の単位ベクトルを求め、これまではその和を取っていたが、和が0ベクトルになってしまうことがあるのが問題。そこで、適度に場合分けして、差のベクトルを法線ベクトルとして書くようにした。
(1月2日阿原)