2011-07-26 62 views
4

我想建立一個應用程序,用戶可以使用鼠標來繪製回形針,即設置螺旋的起點和終點,然後通過用鼠標拖動這些點,他也可以設置形狀通過修改開始和結束曲率的迴旋曲線。可能爲了改變曲率,我將需要使用切線,儘管我不確定這一點。如何在Qt中以圖形方式繪製曲風?

如何才能在Qt中實現?你知道我可以在Qt中運行的任何示例代碼嗎?

+0

如果您仍然需要解決迴旋圖繪製問題,我發佈了一些示例代碼的鏈接。對不起,如果這太遲了半年。如果您在此期間發現了其他有效的示例代碼,我很樂意瞭解它。 – Rethunk

回答

3

最好的辦法可能是使用Graphics View Framework

有幾個例子可以幫助您入門Graphics View Examples頁面。 Diagram scene對於您想要實現的目標而言,它看起來是一個很好的起點。

+0

圖形視圖框架聽起來非常好。但是我怎麼能畫出這些衣服的部分呢?從我在Qt中知道的有CubitToBezier曲線,但在這裏不起作用。我想根據迴旋曲線段的開始和結束曲率繪製曲線。 – schmimona

2

我意識到這是一個老問題,但有關各方有理論和僞歐拉螺旋(迴旋線)在紙「歐拉螺旋的形狀完成」由基米亞,弗蘭克爾的一個很好的討論,波佩斯庫。示例C++代碼可以在布朗大學網站上在線查找。

Euler Spiral for Shape Completion

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

論文通過萊維恩和其他人建議通過基米亞等人在紙的「雙圓弧」計算改進的方法來。列維恩的論文包含了深入的歷史。

The Euler spiral: a mathematical history by Raph Levien

你只需要四個參數繪製螺旋:兩個端點和切線的那些端點的角度。 (您不需要定義曲率。)代碼以您選擇的距離增量輸出兩個端點之間的中間點。你只需要繪製並連接這些中間點。

一旦你實現了代碼,你可能需要調整一些參數,如最小曲率。您可能會看到代碼「爆炸」的幾個參數。

+0

您是否設法找到更有效的代碼?您鏈接的C++代碼看起來像使用迭代搜索來查找解決方案。我需要的是快速持續運行的東西。 – Rocketmagnet

+0

我有一段時間沒有機會修補它。從我記憶中來看,萊文的論文有一個更快的方法。 – Rethunk

+0

另外:「用於3D曲線的3D歐拉螺旋。」 http://cgm.technion.ac.il/people/Gur/papers/2012/12-HT-CGTA.pdf – Rethunk