Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Построение графика по точкам 
:(
    Опции темы
xTr1m
Дата 6.2.2009, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



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

P.S. Я вот думаю, если Безье строится по 3 точкам, то может можно взять мои две граничные точки, а третью задать самому посередине между ними. Или так не получится?

Вся штука в том, что Безье у меня уже реализовано, а вот со сплайнами неохото возиться =))

Это сообщение отредактировал(а) xTr1m - 6.2.2009, 16:20
PM MAIL WWW ICQ   Вверх
Фантом
Дата 6.2.2009, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



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

Если требуется получить еще и гладкую кривую, то простейшее решение - обычный интерполяционный полином. Применение сплайнов и т.п. может стать осмысленным только в том случае, если есть и другие условия.
PM   Вверх
xTr1m
Дата 6.2.2009, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Да, получить нужно гладкую кривую (ну или похожую на гладкую =)) Но как мне получить полином по точкам. Функции нет, есть одни точки на плоскости. 


Это сообщение отредактировал(а) xTr1m - 6.2.2009, 16:44
PM MAIL WWW ICQ   Вверх
Фантом
Дата 6.2.2009, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Посмотрите вот здесь (нужен раздел "Определение"), это и есть решение.
PM   Вверх
xTr1m
Дата 6.2.2009, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Картинку что то не получилось добавить =((  Тогда на словах

Код

private double calcLagrange(double x, double []X, double []Y, int pts)
    {
        double y=0;
        double lj;

        for(int j=0;j<pts;j++)
        {
            lj=1;
            for(int i=0;i<pts;i++)
            {
                if(i!=j)
                {                    
                    lj*=(x-X[i])/(X[j]-X[i]);                    
                }
            }

            y+=Y[j]*lj;            
        }
        
       return y;
    }


Это реализованная функция, и все бы хорошо, но начиная с третьей точки у меня идет какая то погрешность. В чем может быть дело?


PM MAIL WWW ICQ   Вверх
xTr1m
Дата 6.2.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



В виду некоторых обстоятельств вопрос снимаю =))

Это сообщение отредактировал(а) xTr1m - 6.2.2009, 21:09
PM MAIL WWW ICQ   Вверх
xTr1m
Дата 7.2.2009, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Все-таки не могу удержаться и не спросить. Строя график по заданным точкам полиномом Лагранжа, я заметил, что если у одной из точек координата, например, "у" сильно отличается от остальных, то график получается сильно вытянутым вверх и вниз. А есть ли метод позволяющий строить график через заданные точки, которые менее чувствителен к этому?

Добавлено @ 09:00
Вот кстати нашел в C# метод, который позволяет сделать, что я хотел. Используется при это некий "cardinal spline". А по-русски никто не назовет? =))

Это сообщение отредактировал(а) xTr1m - 7.2.2009, 10:10
PM MAIL WWW ICQ   Вверх
Фантом
Дата 7.2.2009, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 2
Всего: 49



Цитата(xTr1m @  7.2.2009,  08:50 Найти цитируемый пост)
Все-таки не могу удержаться и не спросить. Строя график по заданным точкам полиномом Лагранжа, я заметил, что если у одной из точек координата, например, "у" сильно отличается от остальных, то график получается сильно вытянутым вверх и вниз. А есть ли метод позволяющий строить график через заданные точки, которые менее чувствителен к этому?


Вот видите, оказывается, у задачи были и дополнительные условия...  smile Если нужен малый "разброс" (т.е. малость абсолютных значений второй производной), то решение - сплайны. Но Вы его уже нашли.

Цитата(xTr1m @  7.2.2009,  08:50 Найти цитируемый пост)
Вот кстати нашел в C# метод, который позволяет сделать, что я хотел. Используется при это некий "cardinal spline". А по-русски никто не назовет? =))


По-русски их обычно называют просто "сплайны" (cardinal - "основной, главный", так что буквальный перевод - что-то вроде "обычный сплайн").

PM   Вверх
xTr1m
Дата 7.2.2009, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 692
Регистрация: 9.2.2005
Где: Москва

Репутация: нет
Всего: 1



Спасибо, что подтвердили мои догадки =))
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0469 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.