Russian Qt Forum
Ноябрь 23, 2024, 12:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: Кривая по точкам  (Прочитано 47977 раз)
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« : Июль 21, 2007, 12:37 »

Нужна функция, которая позволила бы провести плавную кривую по заданным точкам.
Точки задаются в виде массива Х и У, их может быть любое количество.

Методы cubicTo() и quadTo() не подходят, так как: 1. требуют контрольных точек, 2. ограничены отрезками из 2 или 3 точек, а стыкуются они криво.

Если ли у кого решение этой проблемы? Заранее спасибо.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alex Forth
Гость
« Ответ #1 : Июль 21, 2007, 12:43 »

Оно ?
http://alglib.sources.ru/interpolation/spline3.php
Записан
Sergeich
Гость
« Ответ #2 : Июль 21, 2007, 20:26 »

Достаточно вычислить контрольные точки. Это можно сделать через построение кубического сплайна для параметрической кривой: считаешь коэффициенты для сплайнов x(t) и y(t) (полагая что первая точка из заданного массива получается при t=0, вторая - при t=1, и т.д.), далее из коэффициентов сплайна легко получить контрольные точки для кривых Безье. Статей по построению куб. сплайнов в инете хуева туча.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Июль 21, 2007, 23:28 »

Спасибо за ссылку, я посмотрю. С первого взгляда то что надо.

Ну а по поводу статей - не нашел пока ни одной, решающей именно эту проблему - построить кривую по РЕАЛЬНЫМ точкам, а не по контрольным Грустный
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
joktar
Гость
« Ответ #4 : Июль 22, 2007, 05:28 »

Рассчитывай необходимые контрольные точки.
Как - например Н.Н.Голованов Геометрическое моделирование или Адамс,Математические основы машинной графики.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Июль 22, 2007, 09:42 »

Проблема в том, что встроенные методы QPainter cubicTo() и quadTo() предназначены только для рисования отрезков из 3 точек. То есть, если их стыковать между собой для большей кривой, место стыка выглядит не плавно. Мне же нужна плавная кривая, проходящая более чем через 3 точки (их штук 100 может быть).
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Alex Forth
Гость
« Ответ #6 : Июль 22, 2007, 10:10 »

Цитата: "Racheengel"
Проблема в том, что встроенные методы QPainter cubicTo() и quadTo() предназначены только для рисования отрезков из 3 точек. То есть, если их стыковать между собой для большей кривой, место стыка выглядит не плавно. Мне же нужна плавная кривая, проходящая более чем через 3 точки (их штук 100 может быть).

По той ссылке, что я приводил, обрати внимание на кубические сплайны. Там на границах промежутков задаются значение производных. Если хотябы первая производная в этих точках не будет иметь разрывов, то соединения между отрезками будет плавным.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Июль 25, 2007, 08:32 »

Посмотрел я ссылку... к сожалению, это не то, что надо.
Алгоритм, приведенный там - не работает.
Я пытался построить сплайн всеми способами - но он либо просто соединяет узловые точки прямыми, либо вообще рисует бред.

Вопрос НЕ В РАСЧЕТАХ контрольных, производных и прочих точек. Пусть это останется уделом фанатов. Я ищу РЕАЛЬНО РАБОТАЮЩИЙ алгоритм. Когда на входе задан QVector<QPoint>, И ВСЕ. И рисуется сплайн по данным точкам.

добавлено спустя 7 часов 53 минуты:

 Все, вопрос решился небольшой переделкой Qwt.
Всем спасибо.
Если кому интересно - могу выслать класс отрисовки сплайна, отвязанный от Qwt.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
vaprele07
Гость
« Ответ #8 : Июль 25, 2007, 16:16 »

в qt4.1 появился qpainterpathstroker
в демках можно посмотреть реализацию, вроде то что надо
Записан
Sergeich
Гость
« Ответ #9 : Июль 25, 2007, 17:10 »

Цитировать
в qt4.1 появился qpainterpathstroker
в демках можно посмотреть реализацию, вроде то что надо
Причем тут QPainterPathStroker!? Он просто рисует кривую в виде прерывивистой линии по заданному паттерну!

добавлено спустя 15 минут:

 2 Racheengel: А как оно в QWT рисуется? Хуевой тучей мелких отрезков? Или все-таки через cubicTo() ?
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #10 : Июль 25, 2007, 17:49 »

В qwt там сначала идет просчет аппроксимирующих отрезков, а потом - через drawLines(). Хуевой тучей Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
vaprele07
Гость
« Ответ #11 : Июль 26, 2007, 03:09 »

QGraphicsPathItem? qpainterpath? не спорю если речь идёт о qt без QGraphicsScene.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #12 : Июль 26, 2007, 11:14 »

2 vaprele07: Каким образом ты собираешься получить плавную кривую без контрольных точек при помощи QPainterPath?
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Alex Forth
Гость
« Ответ #13 : Июль 26, 2007, 11:52 »

А что вы тут называете контрольными точками???

ЗЫ: У меня в свое время лабраторные по сплайнам были. Исходники правда не сохранились ( да и кому они нафиг нужны на паскале : ) ), но, помнится, ничего там сложного небыло, и все рисовалось как надо
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #14 : Июль 26, 2007, 14:23 »

В том то и дело, что это два принципиально разных подхода к построению сплайна: по контрольным точкам и по реальным.
Мне нужно было построение по реальным.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.