2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Аппроксимация кривой Безье второго порядка
Сообщение08.03.2013, 23:16 


08/03/13
9
Доброго времени суток.
Есть кривая Безье второго порядка построенная по 3 точкам, координаты известны, есть точка A координаты которой тоже известны и которая лежит на кривой. Требуется получить координаты двух опорных точек, двух кривых Безье второго порядка созданных на основе исходной кривой с разделением в точке A. Если кто-то уже сталкивался с такой проблемой - поделитесь плиз. Если есть код решения на C#, ActionScript 3 или javascript - только плюс.

 Профиль  
                  
 
 Re: Аппроксимация кривой Безье второго порядка
Сообщение08.03.2013, 23:53 
Заслуженный участник


11/05/08
32166
Chum в сообщении #692820 писал(а):
построенная по 3 точкам, координаты известны, есть точка A координаты которой тоже известны и которая лежит на кривой. Требуется получить координаты двух опорных точек,

Если координаты опорных точек известны -- зачем их искать?...

Задайте вопрос, плиз.

 Профиль  
                  
 
 Re: Аппроксимация кривой Безье второго порядка
Сообщение09.03.2013, 00:18 


08/03/13
9
Может быть я неправильно выразился, я использую термины документации языка ActionScript 3 в нём в описании метода curveTo озвучиваются следующие термины 1.Точка начала рисования кривой(текущее положение инструмента), 2.Конечная (якорная) точка рисования и 3.Опорная, та через которую кривая не проходит. Мой вопрос в следующем(популярно), заданную кривую 2 порядка необходимо разбить на 2 кривые второго-же порядка так что бы они сохранили прежний рисунок кривой. Точка А лежащая на исходной кривой - разделитель. Следовательно имеем координаты начала и конца новых кривых, но не имеем координат тех точек этих кривых по которым не проходит рисование (опорных или как-то по-другому, не в этом суть). Без координат этих двух точек построить кривые нельзя. Эти координаты и необходимо определить.

 Профиль  
                  
 
 Re: Аппроксимация кривой Безье второго порядка
Сообщение09.03.2013, 00:28 
Заслуженный участник


11/05/08
32166
Chum в сообщении #692838 писал(а):
заданную кривую 2 порядка необходимо разбить на 2 кривые второго-же порядка так что бы они сохранили прежний рисунок кривой

Кривую невозможно разбить на две кривых. Вы всё-таки попытайтесь задать вопрос.

Квадратичная кривая Безье строится однозначно по трём точкам. Две крайних, как Вы утверждаете, известны. Так что Вам кроме того не известно -- и что Вы, собственно, пытаетесь найти?...

 Профиль  
                  
 
 Re: Аппроксимация кривой Безье второго порядка
Сообщение09.03.2013, 00:49 


08/03/13
9
Постараюсь переформулировать вопрос. Взяв за основу кривую второго порядка(координаты её трёх точек), а также координаты произвольно заданной точки A, лежащей на самой кривой, необходимо получить координаты двух кривых второго порядка, первая из которых начинается в точке с координатами начала кривой-исходника и повторяя её траекторию заканчивалась в точке с координатами A, а вторая начиналась в точке с координатами A и повторяя траекторию кривой-исходника заканчивалась в точке с координатами окончания кривой исходника.

 Профиль  
                  
 
 Re: Аппроксимация кривой Безье второго порядка
Сообщение09.03.2013, 01:12 
Заслуженный участник


11/05/08
32166
Это бессмысленно. Если та точка "А" лежит на исходной кривой, то ничего, кроме исходной кривой (а она Вам якобы известна) Вы и не получите.

 Профиль  
                  
 
 Re: Аппроксимация кривой Безье второго порядка
Сообщение09.03.2013, 08:01 
Модератор
Аватара пользователя


16/02/11
3788
Бурашево
Вот тут в сообщении #416434 писалось про определение опорных точек кривой Безье (правда третьего порядка). Возможно это похоже на то, что требуется.

 Профиль  
                  
 
 Re: Аппроксимация кривой Безье второго порядка
Сообщение11.03.2013, 14:36 


08/03/13
9
Никак не могу решить проблему. Вот схема задачи:
Изображение
Вот формула:
Изображение
где t - отрезок P0-Q0 в долях от P0-P1 и отрезок P1-Q1 в долях от P1-P2
Вот ссылка на страницу с которой взят данный материал:
[url]http://ru.wikipedia.org/wiki/Кривая_Безье[/url]
Что известно в условии:
Известны координаты точек P0, P1, p2, B.
Что требуется найти:
Найти координаты точек Q0 и Q1.
Не знаю как воспользоваться приведённой формулой. Там указаны объекты(точки) а у меня координаты.
Подскажите плиз.

 Профиль  
                  
 
 Re: Аппроксимация кривой Безье второго порядка
Сообщение13.03.2013, 23:03 


08/03/13
9
С шутками-прибаутками, с ненормативной лексикой, методом подбора решил данный вопрос методом подбора, если кто-то знаком с ActionScript 3, вот плиз решение. Код не причёсывал специально, для лучшей читабельности.
Код:
/* Аргументы: 1 - Массив координат точек = [P0.x, P0.y, P2.x, P2.y, P1.x, P1.y, P1.x, P1.y, B.x, B.y],
2 - Количество шагов подбора, выведено в качестве аргумента для того, чтобы в первом приближении
задать большее значение, а в последующих - меньшее. Координаты точки P1 указываются дважды. */

public function approksCurve(arg1:Array, arg2:int):Array {
   var rez:Array = new Array();      
   /* Настроечные параметры */
   var kolSh:int = arg2;          /* Количество шагов задания значения t */
   var prir1x:Number = (arg1[0] - arg1[4]) / kolSh;   /* --- Приращение по осям X,Y */
   var prir1y:Number = (arg1[1] - arg1[5]) / kolSh;
   var prir2x:Number = (arg1[6] - arg1[2]) / kolSh;
   var prir2y:Number = (arg1[7] - arg1[3]) / kolSh;      
   var tek1x:Number;
   var tek1y:Number;
   var tek2x:Number;
   var tek2y:Number;
   var provZ:Number;
   var minZn:Number = Math.abs((arg1[8]-arg1[0])*(arg1[3]-arg1[1])-(arg1[9]-arg1[1])*(arg1[2]-arg1[0]));
   var minIn:int = 0;
   for (var i:int = 0; i < kolSh; i++) {
      tek1x = arg1[0] - i * prir1x;
      tek1y = arg1[1] - i * prir1y;
      tek2x = arg1[6] - i * prir2x;
      tek2y = arg1[7] - i * prir2y;      
      provZ = Math.abs((arg1[8] - tek1x) * (tek2y - tek1y) - (arg1[9] - tek1y) * (tek2x - tek1x));      
      if (minZn > provZ) {      
         minZn = provZ;      
         minIn = i;      
      }      
   }
           /* Возвращает координаты точек Q0 и Q1 */      
   rez[0] = arg1[0] - (minIn * prir1x);     /* Координата Q0.x */      
   rez[1] = arg1[1] - (minIn * prir1y);     /* Координата Q0.y */      
   rez[2] = arg1[6] - (minIn * prir2x);     /* Координата Q1.x */
   rez[3] = arg1[7] - (minIn * prir2y);     /* Координата Q1.y */
   if (minZn > 0 && minZn < 1) return rez;
   else {      
      arg1[0] = arg1[0] - ((minIn - 1) * prir1x);
      arg1[1] = arg1[1] - ((minIn - 1) * prir1y);
      arg1[2] = arg1[2] - ((minIn - 1) * prir2x);
      arg1[3] = arg1[3] - ((minIn - 1) * prir2y);
      arg1[4] = arg1[4] - ((minIn + 1) * prir1x);
      arg1[5] = arg1[5] - ((minIn + 1) * prir1y);
      arg1[6] = arg1[6] - ((minIn + 1) * prir2x);
      arg1[7] = arg1[7] - ((minIn + 1) * prir2y);
      return approksCurve(arg1, 2000);
   }      
}

 Профиль  
                  
 
 Re: Аппроксимация кривой Безье второго порядка
Сообщение18.11.2014, 14:21 


20/03/14
12041
 i  Excalibur921 Сообщение в Карантине.
«Аппроксимация кривой Безье второго порядка»

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: YandexBot [bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group