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

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

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Кривая по точкам  (Прочитано 48431 раз)
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.059 секунд. Запросов: 22.