2011-07-26 8 views
4

私は、ユーザーがマウスでクロソイドを描画するために使用できるアプリケーションを構築しようとしています。つまり、スパイラルの開始点と終了点を設定し、これらの点をマウスでドラッグすると、開始と終了の曲率を変更することによってクロソイドを修正します。おそらく曲率を変更するために、私はそれがわからないが、接線を使う必要があるだろう。Qtでクロソイドをグラフィカルに描く方法は?

Qtでどのように実装できますか? Qtで実行できるコードの例を知っていますか?

+0

クロソイド描画の問題を解決する必要がある場合は、サンプルコードへのリンクを投稿しました。これは半年ほど遅れて申し訳ありません。その間に他の効率的なサンプルコードを見つけたら、それについて知りたいと思うでしょう。 – Rethunk

答えて

3

最良の方法はおそらくGraphics View Frameworkを使用することです。

Graphics View Examplesページで始めるのに役立ついくつかの例があります。 Diagram sceneは、あなたが達成したいことのための良い出発点のようです。

+0

グラフィックスビューフレームワークは本当に良い音です。しかし、私はどのようにクロソイドのこれらのセグメントを描くことができますか?私がQtで知っていることは、ベジェ曲線の場合はcubicToですが、ここではうまくいきません。私はクロソイドのセグメントに与えられた開始と終了の曲率に従って曲線を描きたい。 – schmimona

2

は、私は、これは古い質問ですが、利害関係者のためにオイラーは、「形状完了のためのオイラースパイラル」紙中(クロソイド)Kimia、フランケルによってスパイラルのための理論と擬似コードの良い議論があり、ことを実現しますポポスク。サンプルのC++コードは、Brown Universityのウェブサイトでオンラインで見つけることができます。

Euler Spiral for Shape Completion

Page with download link for C++ code for method of Kimia, Frankel, and Popescu

Levienらによる論文らKimia、論文の "biarc" 計算に改善する方法を示唆しています。 Levienの論文には深い歴史があります。 2つのエンドポイント、およびそれらのエンドポイントでの接線の角度:

The Euler spiral: a mathematical history by Raph Levien

は、あなただけの螺旋を描くように4つのパラメータが必要です。 (曲率を定義する必要はありません)。コードは、選択した距離の増分で2つの終点間の中間点を出力します。それらの中間点をプロットして接続するだけです。

コードを実装したら、最小曲率などのパラメータの一部を調整する必要があります。コードが「爆発する」ためのいくつかのパラメータが表示されます。

+0

もっと効率的なコードを見つけることができましたか?リンクしたC++コードは、反復検索を使用して解決策を見つけるように見えます。私が必要とするのは、急速で一定の時間で動くものです。 – Rocketmagnet

+0

私はしばらくのうちにこれを試してみる機会がありませんでした。 Levinの論文は、私が覚えているものから、より速いアプローチをしました。 – Rethunk

+0

また、「3D曲線のための3D Euler Spirals」 http://cgm.technion.ac.il/people/Gur/papers/2012/12-HT-CGTA.pdf – Rethunk