Форум: "Прочее";
Текущий архив: 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]Интерполяция по Лагранжу будет в самый раз.
Вот это пол часа? — Неверю…
← →
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.049 c