というわけで 今 作ってる最中の
テストプログラムです。
http://afsoft.jp/test/p035.zip
動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

楕円 を追加しました。
その他、幾つか微調整。
楕円は、内部で 64分割し、3点円弧を連続させて 32本の連続円弧状態としています。そのため、細長い楕円の場合、綺麗にならなかったりします。また、楕円式ではないですから、本来の楕円と異なるため、楕円上の各点で誤差が出ます。交点は、楕円式での計算結果の交点ではなく、各補完円弧との交点となります。
実線以外の楕円の描画は、その連続円弧での描画になりますが、実線の楕円の描画は、DelphiXE4・FireMonkeyの描画命令で直接行っています。その方が若干高速であるからです。ですが、DelphiXE4・FireMonkeyの描画の各座標値は単精度実数であるため、どんどん拡大表示をすると誤差が目立ってしまいます。ですが、本ソフトでは、線幅をそのまんま表現してますので、拡大すれば線も太くなっていって、そういった状態で図面を描く事はほぼ無いでしょうから、このままにしてあります。
将来、楕円の弧長(周長)を計算する等の場合も、この連続円弧で計算しますので、本来の楕円での結果と若干違ってくると思います。
テストプログラムです。
動作環境は、Vista以降ってことにします。
今は Xpマシンがなくてチェック出来ないので。

楕円 を追加しました。
その他、幾つか微調整。
楕円は、内部で 64分割し、3点円弧を連続させて 32本の連続円弧状態としています。そのため、細長い楕円の場合、綺麗にならなかったりします。また、楕円式ではないですから、本来の楕円と異なるため、楕円上の各点で誤差が出ます。交点は、楕円式での計算結果の交点ではなく、各補完円弧との交点となります。
実線以外の楕円の描画は、その連続円弧での描画になりますが、実線の楕円の描画は、DelphiXE4・FireMonkeyの描画命令で直接行っています。その方が若干高速であるからです。ですが、DelphiXE4・FireMonkeyの描画の各座標値は単精度実数であるため、どんどん拡大表示をすると誤差が目立ってしまいます。ですが、本ソフトでは、線幅をそのまんま表現してますので、拡大すれば線も太くなっていって、そういった状態で図面を描く事はほぼ無いでしょうから、このままにしてあります。
将来、楕円の弧長(周長)を計算する等の場合も、この連続円弧で計算しますので、本来の楕円での結果と若干違ってくると思います。