Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];

Вниз

Кривая по трем точкам.   Найти похожие ветки 

 
@!!ex ©   (2007-04-16 19:36) [0]

Нужно построить кривую по трем точкам.
1 и 3 - концы кривой. 2 - задет кривизу.
Особых пожеланий нет.
Рассматривал два варианта:
парабола. Но частный случаев и поворотов оказалось так много, что пришлось от этой идеи отказаться.
безье. сейчас ее юзаю. Но проблема реально в том, что центральная точка задает кривую, но при этом не принадлежит этой кривой..
есть идеи?


 
ArtemESC ©   (2007-04-16 19:39) [1]

Безье для трех точек:)


 
ferr ©   (2007-04-16 19:39) [2]

бррр... окружность это называется ;-)


 
Virgo_Style ©   (2007-04-16 19:42) [3]

@!!ex ©   (16.04.07 19:36)
парабола. Но частный случаев и поворотов оказалось так много, что пришлось от этой идеи отказаться.


не понял...


 
@!!ex ©   (2007-04-16 19:43) [4]

> [1] ArtemESC ©   (16.04.07 19:39)

Безье для трех точек? Не понял...


> [2] ferr ©   (16.04.07 19:39)

Окружность не получилась... Может в решении уравнений накосячил, а может и нет.....


 
@!!ex ©   (2007-04-16 19:43) [5]

> [3] Virgo_Style ©   (16.04.07 19:42)

Надо учитывать положение точек при отрисовки и рещении уравнения.


 
Virgo_Style ©   (2007-04-16 19:51) [6]

@!!ex ©   (16.04.07 19:43) [5]
факт. надо.


 
Чапаев ©   (2007-04-16 19:52) [7]

Что-то вы, батенька, очень уж мудрствуете... Интерполяция по Лагранжу будет в самый раз.


 
ArtemESC ©   (2007-04-16 19:54) [8]

Чапаев ©   (16.04.07 19:52) [7]
Нет, лучше по Ньютону!!!!!


 
@!!ex ©   (2007-04-16 19:58) [9]

> [7] Чапаев ©   (16.04.07 19:52)

Хреново гуглится. А на Матане мы этого еще не проходили. Можно поподробнее.


 
@!!ex ©   (2007-04-16 20:00) [10]

Нашел что-то... Но там много незнакомых букв... :$


 
Dimka Maslov ©   (2007-04-16 20:02) [11]

Через любые три точки, не лежащие на одной прямой, можно провести кривую второго порядка. Другой вопрос, что это за кривая.


 
ArtemESC ©   (2007-04-16 20:03) [12]

@!!ex ©   (16.04.07 19:58) [9]
Самарский "Численные методы" страницы 59-61 ... Djvu


 
Чапаев ©   (2007-04-16 20:03) [13]

> [9] @!!ex ©   (16.04.07 19:58)
На матане и не пройдёте, это обычно на ЧМО проходят. :-)


 
ferr ©   (2007-04-16 20:05) [14]

Ну... не знаю что тебе надо. Через 3 точки ого-го что можно построить. Самое простое это окружность. Расписывешь уравнение серединных перпендикуляров, находиш точку их пересечения решением обыкновенного САУ второго порядка. Потом параметрически строишь дугу..


 
@!!ex ©   (2007-04-16 20:05) [15]

> [11] Dimka Maslov ©   (16.04.07 20:02)

Шо можно я это знаю. :))
Окружность можно. ТОлько чего то не получается. А то что получается не очень карашо выглядит.


 
@!!ex ©   (2007-04-16 20:07) [16]

> Расписывешь уравнение серединных перпендикуляров

Чего-чего???
Как это уравнение будет выглядить, елси не секрет?

Все равно будут частные случаи, когда точки лежат на одной прямой...


 
Kolan ©   (2007-04-16 20:09) [17]

> Как это уравнение будет выглядить, елси не секрет?

Прочитай то что тебе говорят. Там есть алгоритм.


 
@!!ex ©   (2007-04-16 20:11) [18]

> [17] Kolan ©   (16.04.07 20:09)

В процессе. Только качать еще полчаса..


 
Kolan ©   (2007-04-16 20:12) [19]

Интерполяция по Лагранжу будет в самый раз.

Вот это пол часа? — Неверю&#133


 
Kolan ©   (2007-04-16 20:17) [20]

http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BD%D0%BE%D0%BC_%D0%9B%D0%B0%D0%B3%D1%80%D0%B0%D0%BD%D0%B6%D0%B0


 
Dimka Maslov ©   (2007-04-16 20:18) [21]


> @!!ex ©   (16.04.07 20:05) [15]


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


 
ferr ©   (2007-04-16 20:21) [22]

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

Ага, причём способов сотни..


 
ArtemESC ©   (2007-04-16 20:27) [23]

ferr ©   (16.04.07 20:21) [22]
Больше, ГОРАЗДО больше!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


 
@!!ex ©   (2007-04-16 20:27) [24]

> [21] Dimka Maslov ©   (16.04.07 20:18)

Да не сложно. составить матрицу и тупо релить СЛУ. Я ж говорю, проблема в куче частных случаев и в том, что параболу надо вращать, чтобы получить риемлимый вариант.


 
@!!ex ©   (2007-04-16 20:28) [25]

> [19] Kolan ©   (16.04.07 20:12)

Я книгу имел ввиду.


 
ferr ©   (2007-04-16 20:29) [26]

> Да не сложно. составить матрицу и тупо релить СЛУ. Я ж говорю,
> проблема в куче частных случаев и в том, что параболу надо
> вращать, чтобы получить риемлимый вариант.

1 частный случай. Если матрица имеет ранг 1 то точки лежат на одной прямой. Это для окружности.


 
Чапаев ©   (2007-04-16 20:49) [27]

> [19] Kolan ©   (16.04.07 20:12)
Поясни... :-)


 
@!!ex ©   (2007-04-16 20:58) [28]

Сделал через окружность. не плохо получилось.
Спасибо всем!


 
@!!ex ©   (2007-04-16 21:02) [29]

Procedure DrawCircle(P1,P2,P3:TPoint);
var
 ma,mb:single;
 x,y:single;
 radius:single;
begin
 if P1.x=p2.X then p1.x:=p1.x+1;
 if P2.x=p3.X then p3.x:=p3.x+1;
 ma:=(p2.Y-p1.y)/(p2.x-p1.x);
 mb:=(p3.Y-p2.y)/(p3.x-p2.x);
 if (ma=mb) then begin
   BackBuffer.Canvas.MoveTo(P1.X,p1.Y);
   BackBuffer.Canvas.LineTo(P3.X,p3.Y);
 end
 else begin
   x:=(ma*mb*(p1.Y-p3.y) + mb*(p1.x+p2.x) - ma*(p2.X+p3.x))/(2*(mb-ma));
   if ma<>0 then
     y:=(-1/ma)*(x-(p1.x+p2.x)/2)+(p1.y+p2.y)/2
   else
     y:=(-1/mb)*(x-(p2.x+p3.x)/2)+(p2.y+p3.y)/2;
   radius:=sqrt(sqr(p1.X-x)+sqr(p1.Y-y));
   backBuffer.Canvas.Arc(round(x-radius),round(y-radius),round(x+radius),round(y+radius),p1.X,p1.y,p3.X,p3.y);
 end;
end;


Другой косяк. В некоторых случаях нужно рисовать не от первой точки к третьей, а от третьей к первой...
но я не пойму, как эти случай отслеживать.


 
@!!ex ©   (2007-04-16 21:03) [30]

Все. понял. Нужно смотреть знак точки центра окружности при подстановке в уравнение прямой от первой точки к третьей...



Страницы: 1 вся ветка

Форум: "Прочее";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.044 c
9-1149933920
DevilDevil
2006-06-10 14:05
2007.05.13
Мультитекстурирование?


15-1176356700
StriderMan
2007-04-12 09:45
2007.05.13
Бытовые роботы


2-1176958517
san655
2007-04-19 08:55
2007.05.13
Не изменяется свойство Count у компонента Listbox


15-1176673655
Германн
2007-04-16 01:47
2007.05.13
{$IFDEF } и {$IFNDEF}


4-1166284681
Max_2006
2006-12-16 18:58
2007.05.13
Добавить ресурс в exe





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский