Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.01.03;
Скачать: CL | DM;

Вниз

Пересечение прямой и окружности   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.013 c
2-1258126599
ms
2009-11-13 18:36
2010.01.03
Помогите. Handle


15-1257181639
Badevlad
2009-11-02 20:07
2010.01.03
Обсудить BDV DataHider 3.1


2-1257950877
Alexey
2009-11-11 17:47
2010.01.03
Поток, передача параметра в onTerminated


15-1257334588
XXL
2009-11-04 14:36
2010.01.03
Сантехники от программирования - нужны ли они ?


15-1257283812
Юрий
2009-11-04 00:30
2010.01.03
С днем рождения ! 4 ноября 2009 среда