Как рисовать клотоиды графически в Qt? - PullRequest
4 голосов
/ 26 июля 2011

Я пытаюсь создать приложение, которое пользователь может использовать для рисования клотоидов с помощью мыши, то есть для установки начальной и конечной точек спирали, а затем, перетаскивая эти точки с помощью мыши, он также может задать формуклотоиды путем изменения начальной и конечной кривизны.Вероятно, для изменения кривизны мне нужно будет использовать касательные, хотя я не уверен в этом.

Как можно реализовать это в Qt?Знаете ли вы какие-нибудь примеры кодов, которые я мог бы запустить в Qt?

Ответы [ 2 ]

3 голосов
/ 26 июля 2011

Лучшим подходом, вероятно, будет использование Graphics View Framework .

Есть несколько примеров, которые помогут вам начать работу на странице Графика . Сцена Diagram выглядит как хорошая отправная точка для того, чего вы хотите достичь.

2 голосов
/ 17 января 2012

Я понимаю, что это старый вопрос, но для заинтересованных сторон есть хорошее обсуждение теории и псевдокода для спиралей Эйлера (клотоидов) в статье "Спираль Эйлера для завершения формы" Кимии,Франкель и Попеску.Образец кода C ++ можно найти на сайте университета Брауна.

Спираль Эйлера для завершения формы

Страница со ссылкой для загрузки кода C ++ для метода Кимии, Франкеля и Попеску

В работах Levien и др. Предлагаются методы, улучшающие расчет "biarc" работы Kimia et al.Статья Левиана включает в себя глубокую историю.

Спираль Эйлера: математическая история Рафа Левиана

Для рисования спирали нужно всего четыре параметра: две конечные точкии углы касательных в этих конечных точках.(Вам не нужно определять кривизну.) Код выводит промежуточные точки между двумя конечными точками с шагом по вашему выбору.Вам просто нужно построить и соединить эти промежуточные точки.

Как только вы реализуете код, вам, возможно, потребуется настроить некоторые параметры, такие как минимальная кривизна.Скорее всего, вы увидите несколько параметров, для которых код «взрывается».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...