これらはPerfectTINの6つの最も複雑な機能であり、数週間以内に本番環境に移行することを願っています。
32 32 testptin.cpp(319): testmatrix
36 39 tincanvas.cpp(90): TinCanvas::tick
53 53 mainwindow.cpp(126): MainWindow::tick
56 60 perfecttin.cpp(185): main
58 58 fileio.cpp(457): readPtin
62 62 pointlist.cpp(61): pointlist::checkTinConsistency
2つの数値が異なる場合、それはswitch
ステートメントによるものです。
testmatrix
連続した複数のorder-2およびorder-1forループで構成されており、理解するのは難しくありません。私がベジトポでそれを書いた何年も後にそれを見て私を困惑させたのは、それが83までに何かを改造する理由です。
2つのtick
メソッドは1秒間に20回実行され、いくつかの条件をチェックします。複雑さに少し問題がありましたが、バグは、メニュー項目がグレー表示されるべきでないときにグレー表示されたり、TIN表示が不安定に見えたりすることよりも悪いことではありません。
TINは、ポイント、エッジ、および三角形がすべて互いに向き合っている、バリアントのウィングエッジ構造として格納されます。checkTinConsistency
構造が複雑であり、それが間違っている可能性があるいくつかの方法があるため、それがそうであるように複雑でなければなりません。
PerfectTINで見つけるのが最も難しいバグは、循環的バグではなく、並行性バグでした。
Bezitopoで最も複雑な関数(私はBezitopoからコードをコピーしてPerfectTINを開始しました):
49 49 tin.cpp(537): pointlist::tryStartPoint
50 50 ptin.cpp(237): readPtin
51 51 convertgeoid.cpp(596): main
54 54 pointlist.cpp(117): pointlist::checkTinConsistency
73 80 bezier.cpp(1070): triangle::subdivide
92 92 bezitest.cpp(7963): main
main
inbezitest
は、ifステートメントの長いシーケンスです。三角形をテストする必要がある場合は、を実行しtesttriangle
ます。測定単位をテストする必要がある場合は、を実行しtestmeasure
ます。等々。
の複雑さsubdivide
は、丸め誤差が関数がチェックしなければならない見栄えの悪い条件を生成することはめったにないためです。
現在はtryStartPoint
その一部として使用されているものmaketin
(現在はわずか11の複雑さ)で、さらに複雑になっています。GUIから呼び出して画面を更新する必要があったため、ループの内側を別の関数に分割しました。