Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пересечение прямой и окружности [D7, XP]


Страницы:   1 2

Zheksonz ©   (2009-11-10 19:32:00) 

Вычисление точки пересечения прямой и окружности, при следующих известных:

1) Центром окружности является точка 0,0 т.е. пересечение осей координат.
2) Радиус(r) окружности известен.
3) имеются координаты отрезка(прямой), x1, y1; x2, y2.

Я так понимаю, что нужно решать систему уравнений, которая будет включать в себя уравнение прямой и окружности.

Собственно говоря, вопрос в том, как эту систему, привести к программируемому варианту, т.е. начать обработку с учётом входных данных???


Zheksonz   (2009-11-12 13:57:00) [1]

Проблема в том, что получаемая точка, хоть и на прямой, но немного меньше и по X и по Y. Проверял циркулем))) Чем может быть вызвано это смещение???


Zheksonz   (2009-11-12 10:50:00) [2]

Может кто подскажет, где я ошибся:::

вот код который я перевожу на Дэлфи:


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;


Anatoly Podgoretsky   (2009-11-11 10:36:00) [3]


> П.С. В своё оправдание, а вернее для понимания, почему такие
> вопросы я задаю, хочу сказать, что если бы я продолжил сам
> разбираться в этом вопросе, то раньше бы седая борода у
> меня полезла, чем я докопался бы до решения. Уж я то себя
> знаю.

Ну и чего ты полез не в свое, или это "Уж я то себя знаю."


Юрий Зотов   (2009-11-11 09:03:00) [4]

> Zheksonz   (11.11.09 00:39) [20]

Есть понятия "машинный ноль" и "машинное эпсилон". Они могут быть вычислены и от языка не зависят.

Теорию см. здесь:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374

А в качестве практики - задачка на 5 минут: написать цикл, вычисляющий машинное эпсилон.

За 5 минут борода точно не вырастет, так что опасаться нечего.
:o)


Германн   (2009-11-11 01:10:00) [5]


> antonn ©   (10.11.09 22:27) [14]


> antonn ©   (10.11.09 22:27) [15]
>
>

Слишком много очепяток!


Германн   (2009-11-11 00:45:00) [6]


> все же это поняли, но если бы ты промолчал, мне было бы
> приятно...
>

Я бы промолчал, если бы не прочитал:

> П.С. В своё оправдание, а вернее для понимания, почему такие
> вопросы я задаю, хочу сказать, что если бы я продолжил сам
> разбираться в этом вопросе, то раньше бы седая борода у
> меня полезла, чем я докопался бы до решения. Уж я то себя
> знаю.


Zheksonz   (2009-11-11 00:40:00) [7]

Германн ©   (11.11.09 00:38) [19]

все же это поняли, но если бы ты промолчал, мне было бы приятно...


Zheksonz   (2009-11-11 00:39:00) [8]

if (c*c > r*r*(a*a+b*b)+ EPS)

Есть ли в Делфи аналог EPS, в СИ, что, насколько я понял, является положительным сколь угодно малым вещественным числом???


Германн   (2009-11-11 00:38:00) [9]


> уверен, что станет, но это не мой случай))) Постояльцы сайта
> это могут подтвердить.

Я и так знаю. Просто хотел лишний раз убедиться. Ведь сегодня это основы начальной школы!


Zheksonz   (2009-11-10 23:29:00) [10]

DVM ©   (10.11.09 22:14) [13]

Благодарю за терпение и желание помочь.

Картинка ожила. Спасибо, огромное.

П.С. В своё оправдание, а вернее для понимания, почему такие вопросы я задаю, хочу сказать, что если бы я продолжил сам разбираться в этом вопросе, то раньше бы седая борода у меня полезла, чем я докопался бы до решения. Уж я то себя знаю.


antonn   (2009-11-10 22:55:00) [11]

Нет времени, потому и просил готовое, проверенное и быстрое, если есть.
Ну а нету - так и ладно :)


DVM   (2009-11-10 22:41:00) [12]


> antonn ©   (10.11.09 22:27) [14]

В чем проблема переделать http://e-maxx.ru/algo/circle_line_intersectionна делфи?


antonn   (2009-11-10 22:27:00) [13]

а у кого нить есть оптимизированнаяфункция, возвращающая координаты (а не true/false)? был бы раз получить, сделаю коллизии вменяемые =) (как онказалось, в интернете куча способо даже нахождения пересечений двух окружностей, но нет ни одного времяемого готового примера на дельфи для такой задачки, я уже даже стал сомневаться что она простая :) да и на Си на геймдеве пару раз только мелькает )


antonn   (2009-11-10 22:27:00) [14]


> был бы раз

был бы ра д


DVM   (2009-11-10 22:14:00) [15]


> Zheksonz   (10.11.09 22:01) [12]

A=Y1-Y2
B=X2-X1
C=X1Y2-X2Y1


Zheksonz   (2009-11-10 22:01:00) [16]

Германн ©   (10.11.09 21:17) [11]

уверен, что станет, но это не мой случай))) Постояльцы сайта это могут подтвердить.


Германн   (2009-11-10 21:17:00) [17]


> а что есть коэффициенты Ax, Bx, C, в уравнении прямой

А если переписать уравнение Ax + By + C = 0 так:
y = -A/Bx - C/B понятнее не станет?


Zheksonz   (2009-11-10 21:02:00) [18]

DVM ©   (10.11.09 20:46) [9]

иду на риск осознанно, т.к. мне не привыкать, задавать глупые вопросы..)))

а что есть коэффициенты Ax, Bx, C, в уравнении прямой, если прямая у меня определяется отрезком (x1, y1) (x2, y2)???


DVM   (2009-11-10 20:46:00) [19]


> я не могу разобрать, что есть A, B и C, активно используемые
> в этом примере???

Коэффициенты из уравнения прямой Ax + By + C = 0.


Zheksonz   (2009-11-10 20:34:00) [20]

DVM ©   (10.11.09 20:31) [7]

благодарю, это именно то, что мне нужно!!!

единственное что я не могу разобрать, что есть A, B и C, активно используемые в этом примере???


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо