Форум: "Начинающим";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];
ВнизПересечение прямой и окружности Найти похожие ветки
← →
Zheksonz (2009-11-10 19:32) [0]Вычисление точки пересечения прямой и окружности, при следующих известных:
1) Центром окружности является точка 0,0 т.е. пересечение осей координат.
2) Радиус(r) окружности известен.
3) имеются координаты отрезка(прямой), x1, y1; x2, y2.
Я так понимаю, что нужно решать систему уравнений, которая будет включать в себя уравнение прямой и окружности.
Собственно говоря, вопрос в том, как эту систему, привести к программируемому варианту, т.е. начать обработку с учётом входных данных???
← →
Сергей М. © (2009-11-10 19:35) [1]Программу надо написать
← →
Anatoly Podgoretsky © (2009-11-10 19:41) [2]> Zheksonz (10.11.2009 19:32:00) [0]
А почему одной, как правило две.
← →
Сергей М. © (2009-11-10 19:45) [3]
> Anatoly Podgoretsky © (10.11.09 19:41) [2]
У Жексона все касаемо, а не пересекаемо.
← →
Zheksonz (2009-11-10 20:01) [4]Во, тяжёлая артиллерия бомбит бикасином)))
программу решать не нужно, а вот ДЕЛЬНЫЙ совет не помешал бы.
Анатолий, еси прямая не касается окружности, а проходит через неё, то да, две точки, но мне из них двоих нужна только одна, а вот какая к вопросу отношения не имеет.
уравнения прямой и окружности:
x^2+y^2 = R^2;
(y1-y2)*x+(x2-x1)*y+(x1*y2-x2*y1) = 0;
это была, типа, система уравнений. Вот как её привести к программируемому виду, зная исходные данные(x1, y1; x2, y2, r)???
← →
MBo © (2009-11-10 20:11) [5]реши систему на бумаге. а полученную формулу уже переведи в программируемый вид
← →
Zheksonz (2009-11-10 20:15) [6]MBo © (10.11.09 20:11) [5]
пойду погуглю: "как решать системы уравнений?" )))
каюсь, забыл как это делается, вот и все дела...
← →
DVM © (2009-11-10 20:31) [7]
> Zheksonz (10.11.09 19:32)
http://e-maxx.ru/algo/circle_line_intersection
← →
Zheksonz (2009-11-10 20:34) [8]DVM © (10.11.09 20:31) [7]
благодарю, это именно то, что мне нужно!!!
единственное что я не могу разобрать, что есть A, B и C, активно используемые в этом примере???
← →
DVM © (2009-11-10 20:46) [9]
> я не могу разобрать, что есть A, B и C, активно используемые
> в этом примере???
Коэффициенты из уравнения прямой Ax + By + C = 0.
← →
Zheksonz (2009-11-10 21:02) [10]DVM © (10.11.09 20:46) [9]
иду на риск осознанно, т.к. мне не привыкать, задавать глупые вопросы..)))
а что есть коэффициенты Ax, Bx, C, в уравнении прямой, если прямая у меня определяется отрезком (x1, y1) (x2, y2)???
← →
Германн © (2009-11-10 21:17) [11]
> а что есть коэффициенты Ax, Bx, C, в уравнении прямой
А если переписать уравнение Ax + By + C = 0 так:
y = -A/Bx - C/B понятнее не станет?
← →
Zheksonz (2009-11-10 22:01) [12]Германн © (10.11.09 21:17) [11]
уверен, что станет, но это не мой случай))) Постояльцы сайта это могут подтвердить.
← →
DVM © (2009-11-10 22:14) [13]
> Zheksonz (10.11.09 22:01) [12]
A=Y1-Y2
B=X2-X1
C=X1Y2-X2Y1
← →
antonn © (2009-11-10 22:27) [14]а у кого нить есть оптимизированная функция, возвращающая координаты (а не true/false)? был бы раз получить, сделаю коллизии вменяемые =) (как онказалось, в интернете куча способо даже нахождения пересечений двух окружностей, но нет ни одного времяемого готового примера на дельфи для такой задачки, я уже даже стал сомневаться что она простая :) да и на Си на геймдеве пару раз только мелькает )
← →
antonn © (2009-11-10 22:27) [15]
> был бы раз
был бы рад
← →
DVM © (2009-11-10 22:41) [16]
> antonn © (10.11.09 22:27) [14]
В чем проблема переделать http://e-maxx.ru/algo/circle_line_intersection на делфи?
← →
antonn © (2009-11-10 22:55) [17]Нет времени, потому и просил готовое, проверенное и быстрое, если есть.
Ну а нету - так и ладно :)
← →
Zheksonz (2009-11-10 23:29) [18]DVM © (10.11.09 22:14) [13]
Благодарю за терпение и желание помочь.
Картинка ожила. Спасибо, огромное.
П.С. В своё оправдание, а вернее для понимания, почему такие вопросы я задаю, хочу сказать, что если бы я продолжил сам разбираться в этом вопросе, то раньше бы седая борода у меня полезла, чем я докопался бы до решения. Уж я то себя знаю.
← →
Германн © (2009-11-11 00:38) [19]
> уверен, что станет, но это не мой случай))) Постояльцы сайта
> это могут подтвердить.
Я и так знаю. Просто хотел лишний раз убедиться. Ведь сегодня это основы начальной школы!
← →
Zheksonz (2009-11-11 00:39) [20]if (c*c > r*r*(a*a+b*b)+EPS)
Есть ли в Делфи аналог EPS, в СИ, что, насколько я понял, является положительным сколь угодно малым вещественным числом???
← →
Zheksonz (2009-11-11 00:40) [21]Германн © (11.11.09 00:38) [19]
все же это поняли, но если бы ты промолчал, мне было бы приятно...
← →
Германн © (2009-11-11 00:45) [22]
> все же это поняли, но если бы ты промолчал, мне было бы
> приятно...
>
Я бы промолчал, если бы не прочитал:
> П.С. В своё оправдание, а вернее для понимания, почему такие
> вопросы я задаю, хочу сказать, что если бы я продолжил сам
> разбираться в этом вопросе, то раньше бы седая борода у
> меня полезла, чем я докопался бы до решения. Уж я то себя
> знаю.
← →
Германн © (2009-11-11 01:10) [23]
> antonn © (10.11.09 22:27) [14]
> antonn © (10.11.09 22:27) [15]
>
>
Слишком много очепяток!
← →
Юрий Зотов © (2009-11-11 09:03) [24]> Zheksonz (11.11.09 00:39) [20]
Есть понятия "машинный ноль" и "машинное эпсилон". Они могут быть вычислены и от языка не зависят.
Теорию см. здесь:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
А в качестве практики - задачка на 5 минут: написать цикл, вычисляющий машинное эпсилон.
За 5 минут борода точно не вырастет, так что опасаться нечего.
:o)
← →
Anatoly Podgoretsky © (2009-11-11 10:36) [25]
> П.С. В своё оправдание, а вернее для понимания, почему такие
> вопросы я задаю, хочу сказать, что если бы я продолжил сам
> разбираться в этом вопросе, то раньше бы седая борода у
> меня полезла, чем я докопался бы до решения. Уж я то себя
> знаю.
Ну и чего ты полез не в свое, или это "Уж я то себя знаю."
← →
Zheksonz (2009-11-12 10:50) [26]Может кто подскажет, где я ошибся:::
вот код который я перевожу на Дэлфи:
double r, a, b, c; // входные данные
double x0 = -a*c/(a*a+b*b), y0 = -b*c/(a*a+b*b);
if (c*c > r*r*(a*a+b*b)+EPS)
puts ("no points");
else if (abs (c*c - r*r*(a*a+b*b)) < EPS) {
puts ("1 point");
cout << x0 << " " << y0 << "\n";
}
else {
double d = r*r - c*c/(a*a+b*b);
double mult = sqrt (d / (a*a+b*b));
double ax,ay,bx,by;
ax = x0 + b * mult;
bx = x0 - b * mult;
ay = y0 - a * mult;
by = y0 + a * mult;
puts ("2 points");
cout << ax << " " << ay << "\n" << bx << " " << by << "\n";
}
а вот моя функция:
function PerPryamAndOkr(x1, y1, x2, y2, r: Real; var xp3, yp3, xp3_, yp3_: Real): boolean;
const
EPS = 0.000000001;
var
a, b, c: Real;
x0, y0: Real;
mult, d: Real;
begin
a := y1 - y2;
b := x2 - x1;
c := x1 * y2 - x2 * y1;
x0 := -a*c/(a*a+b*b);
y0 := -b*c/(a*a+b*b);
if (c*c > r*r*(a*a+b*b)+EPS) then
begin
result := false;
exit;
end;
if (abs (c*c - r*r*(a*a+b*b)) < EPS) then
begin
result := false;
exit;
end;
d := r*r - c*c/(a*a+b*b);
mult := sqrt (d / (a*a+b*b));
xp3 := x0 + b * mult;
yp3 := y0 - a * mult;
xp3_ := x0 - b * mult;
yp3_ := y0 + a * mult;
result := true;
end;
← →
Zheksonz (2009-11-12 13:57) [27]Проблема в том, что получаемая точка, хоть и на прямой, но немного меньше и по X и по Y. Проверял циркулем))) Чем может быть вызвано это смещение???
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.01.03;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.005 c