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

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

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

Сообщений: 2679


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


Просмотр профиля
« Ответ #30 : Сентябрь 10, 2008, 13:57 »

Смотрю, тема через год воскресла Улыбающийся
А вот найденное решение для кривой по точкам:
http://ii-system.com/soft/devzone/spline.2007.09.16.zip

Записан

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 не волк, в лес не уйдёт
Sergeich
Гость
« Ответ #31 : Сентябрь 13, 2008, 09:32 »

Не работает ссылка.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #32 : Сентябрь 13, 2008, 10:13 »

2 Sergeich, дак ты на ii-system.com зайди в раздел "Developer Zone" (http://ii-system.com/soft/devzone/devzone.htm)
Записан

Юра.
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #33 : Сентябрь 13, 2008, 15:49 »

хм, может сервер лежал - сейчас работает...
Записан

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 не волк, в лес не уйдёт
miha-ha
Гость
« Ответ #34 : Ноябрь 13, 2008, 17:58 »

для того, чтобы кривая была плавной в точках соединения нужно точки выбирать следующим образом:
первый участок кривой: 1, 2, 3
второй участок кривой: 2, 3,4
и т.д. тогда всё будет ок! с помощью встроенных функций... и не нуна выдумывать велосипед Подмигивающий
Записан
Sergeich
Гость
« Ответ #35 : Ноябрь 13, 2008, 22:30 »

Умный, да? Можешь дать определение плавности? И объяснить чо такое 123, 234? Это КТ Безье? или чо?
Записан
miha-ha
Гость
« Ответ #36 : Март 03, 2009, 17:44 »

Умный, да? Можешь дать определение плавности? И объяснить чо такое 123, 234? Это КТ Безье? или чо?
Хм... Если на память, то функция называется гладкой если дифференцируема в каждой точке...
а цифры - это контрольные точки, и если строить как я указал можно получить плавную кривую без изломов.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #37 : Март 04, 2009, 01:00 »

вообще вопрос был про построение кривой через ПРОХОДЯЩИЕ точки, а не через контрольные...
Записан

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 не волк, в лес не уйдёт
miha-ha
Гость
« Ответ #38 : Март 04, 2009, 10:04 »

вообще вопрос был про построение кривой через ПРОХОДЯЩИЕ точки, а не через контрольные...
Вот в виде кода:
Код:
QPointF MainWindow::CatmulRom(QPointF &p1, QPointF &p2, QPointF &p3, QPointF &p4, double &t)
{
    return 0.5*(-t*(1-t)*(1-t)*p1+(2-5*t*t+3*t*t*t)*p2+t*(1+4*t-3*t*t)*p3-t*t*(1-t)*p4);
}

void MainWindow::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);

    QPointF p1(50,50), p2(100,80), p3(150,50), p4(200,100), p5(250,50), p6(300,100);

    painter.setPen(QPen(QBrush(Qt::red),5));
    painter.drawPoint(p1);
    painter.drawPoint(p2);
    painter.drawPoint(p3);
    painter.drawPoint(p4);
    painter.drawPoint(p5);
    painter.drawPoint(p6);

    double tStart=0, tFinish=0;

    int stepCount = 5;
    for(int i=0; i<stepCount; ++i)
    {
        tStart = tFinish;
        tFinish += 1.0/stepCount;
        painter.setPen(Qt::green);
        //сегмент рассчитывается на участке между 2-х внутренних точек
        painter.drawLine(CatmulRom(p1,p1,p2,p3,tStart), CatmulRom(p1,p1,p2,p3,tFinish));  //дублирование первой точки для построения первого сегмента p1-p2
        painter.drawLine(CatmulRom(p1,p2,p3,p4,tStart), CatmulRom(p1,p2,p3,p4,tFinish));  //p2-p3
        painter.drawLine(CatmulRom(p2,p3,p4,p5,tStart), CatmulRom(p2,p3,p4,p5,tFinish));  //p3-p4
        painter.drawLine(CatmulRom(p3,p4,p5,p6,tStart), CatmulRom(p3,p4,p5,p6,tFinish));  //p4-p5
        painter.drawLine(CatmulRom(p4,p5,p6,p6,tStart), CatmulRom(p4,p5,p6,p6,tFinish));  //дублирование последней точки для построения последнего сегмента p5-p6

    }


}

не отдельная функция как Вы просили, но думаю разберетесь!
Записан
miha-ha
Гость
« Ответ #39 : Март 04, 2009, 10:17 »

Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


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


Просмотр профиля
« Ответ #40 : Март 23, 2009, 15:31 »

Выглядит симпатично Улыбающийся
Не желаете в виде компонента оформить и выложить на кути-апс например?
Записан

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 не волк, в лес не уйдёт
Khs
Гость
« Ответ #41 : Март 23, 2009, 15:48 »

Мне кажется прежде чем выкладывать, надо как-то усложнить данный пример Улыбающийся
Записан
miha-ha
Гость
« Ответ #42 : Март 23, 2009, 16:02 »

Выглядит симпатично Улыбающийся
Не желаете в виде компонента оформить и выложить на кути-апс например?

Спасибо!
Но боюсь, что как обычно не хватит времени... Грустный
Записан
нуб
Гость
« Ответ #43 : Июнь 15, 2012, 01:24 »

Народ сори за флуд но есть задачка по кривой безье помогите решить
2. Вычислить координатный вектор Р3, задающий касательный
вектор, проходящий вдоль кривой, соединяющей два сегмента кривой Безье,
иначе определяемых как P1[0 0 0], P2[2 2 -2], P4[4 0 0] и Q1[4 0 0], Q2[6 -2 1],
Q3[8 -3 2], Q4[10 0 1].
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #44 : Июль 24, 2013, 22:04 »

не отдельная функция как Вы просили, но думаю разберетесь!
Скопипастил фашу формулу, это сплайн Эрмита. Однако в моей задаче возникла проблема, точка вброса: в моей задаче есть случай, контур похож на яйцо(трансформированный круг) со множеством точек и иногда две нижние точки яйца разрываются и расходятся в стороны на большое расстояние, в результате сплайн на предыдущем отрезке шатает, как на картинке, а должно быть как со сплайном Акима.

Мне понравился вариант со сплайном Акимы, посоветуйте вариант для замкнутой кривой на плоскости и полегче алгоритм. Желательно чтобы сплайн проходил по точкам - это верные значения.

p.s. думаю над вариантами решения, возможно перед тем как далеко уносить точку, стоит поставить рядом с фигурой еще одну.
« Последнее редактирование: Июль 24, 2013, 22:15 от deMax » Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


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