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 ] 

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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