Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.51 MB
Время: 0.009 c
15-1257181639
Badevlad
2009-11-02 20:07
2010.01.03
Обсудить BDV DataHider 3.1


15-1257313780
Kolan
2009-11-04 08:49
2010.01.03
Делать DMClient опенсорсным?


3-1232001594
TL
2009-01-15 09:39
2010.01.03
Вставка данных в две таблицы


2-1257917183
Tornado
2009-11-11 08:26
2010.01.03
Как разрешить ввод только заглавных букв?


3-1232444432
MsGuns
2009-01-20 12:40
2010.01.03
Виртуальные таблицы в TSQL





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский