Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];

Вниз

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

 
Bboy tn   (2002-11-10 00:19) [0]

Есть два круга с заданными центрами и радиусами.

1) Нужно определить, пересекаются ли они.

2) Если пересекаются, то задать положение центра первого круга так, чтобы они только касались. "Отдалять" нужно по линии, соединяющей центры.

Спасибо за внимание.


 
MBo   (2002-11-10 06:30) [1]

1. Если сумма радиусов меньше пвсстояния между центрами, то пересекаются
2. Считаешь угол между абсциссой и вектором от центра второго круга к центру первого через arctan2. Потом X1:=X2+(R1+R2)*Cos(Fi)


 
Николай Быков   (2002-11-10 07:14) [2]


> 1. Если сумма радиусов меньше пвсстояния между центрами,
> то пересекаются

Если сумма радиусов больше расстояния между центрами, то пересекаются


 
Suntechnic   (2002-11-10 07:18) [3]

>Николай Быков © (10.11.02 07:14)
А подумать слабо?


 
Николай Быков   (2002-11-10 08:21) [4]


> Suntechnic ©

А вам?
http://freeprogrammer.narod.ru/1.jpg


 
MBo   (2002-11-10 08:35) [5]

У меня ошибка:
1. Если сумма радиусов меньше расстояния между центрами, то круги НЕ пересекаются


 
Ученик   (2002-11-10 08:58) [6]

>Suntechnic © (10.11.02 07:18)
Что Вы имеете ввиду ?


 
Bboy tn   (2002-11-10 18:36) [7]

MBo, в общем согласен. Но не подходит, когда один круг внутри другого. Расстояние между центрами кругов может быть ноль (центры совпадают). А радиусы разные, получаются, что не пересекаются.

Хотелось бы универсальное, красивое решение.


 
Сатир   (2002-11-10 18:47) [8]

if (sqrt(sqr(x1-x2)+sqr(y1-y2))>r1+r2) or
(sqrt(sqr(x1-x2)+sqr(y1-y2))<r1+r2) then не пересекаются


 
Сатир   (2002-11-10 18:49) [9]

там ещё нужно скобки добавить, когда сумму радиусов будешь вычислять, то есть (r1+r2), так на всякий случай...


 
Suntechnic   (2002-11-10 19:04) [10]

>Ученик ©
Николай Быков © (10.11.02 07:14)
Если сумма радиусов больше расстояния между центрами, то пересекаются


Вообщем-то Bboy tn(10.11.02 18:36) уже обратил на это внимание. Хочу лишь заметить, что центры необязательно должны совпадать. Это условие неверно ни для каких вложенных окружностей, потому как радиус даже одно большой окружности будет всегда болше, чем расстояние между центрами.


 
Bboy tn   (2002-11-10 19:04) [11]

Сатир, что ты написал ?

Условие sqrt(sqr(x1-x2)+sqr(y1-y2))<r1+r2 означает, что растояние между центрами меньше, чем сумма радиусов. Это же условие пересечения, если один круг не находится внутри другого !


 
Сатир   (2002-11-10 19:11) [12]

2Bboy tn (10.11.02 19:04)
давай только без наездов
контрпример: x1=x2; y1=y2; r1<r2 or r1>r2
растояние равно нулю а сумма радиусов больше нуля и при этом окружности не пересекаются. Но если речь идёт именно об кругах, а не окружностях, тогда другой разговор.
Теперь ответ на второй вопрос...


 
Сатир   (2002-11-10 19:26) [13]

Если круги пересекаются, то для выполнения второго задания нам нужно найти уравнение прямой, по которой будет происходить движение одного из кругов до точки соприкасания. А эта прямая проходит через центры наших кругов, координаты который смотрим в условии задачи.
уравнение прямой запишем как x = k * y, где к - коеффициент наклона прямой или k = tan (alfa), где alfa - угол наклона прямой к оси абсцис.
Легко видеть, что
tan(alfa)= (y1-y2)/(x1-x2)
теперь осталось найти координаты круга после передвижения в точку соприкосания.
Так как одна из окружностей будет неподвижна, то примем, что неизменными будут координаты x1, y1
Точка соприкасания будет тогда, когда расстояние между центрами кругов будет равняться сумме радиусов,
тогда имеем систему из двух уравнений
первое
у = (y1-y2)/(x1-x2) * x
второе
sqr(y1-y)+sqr(x1-x)=sqr(r1+r2) , которую, я надеюсь, ты в состоянии решить самостоятельно?


 
MBo   (2002-11-11 06:21) [14]

Когда речь идет о математике, нужно быть корректным в терминах -
КРУГИ пересекаются при r1+r2<d.

А для ОКРУЖНОСТЕЙ условие такое:

abs(r1-r2) < d < r1+r2



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2002.11.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
14-93242
lak
2002-11-10 21:45
2002.11.28
форум - движок


1-92982
Gayrus
2002-11-11 03:03
2002.11.28
KeyToStr


4-93300
Pumpkin
2002-10-16 21:07
2002.11.28
Не дать программе снимать ScreenShot-ы


14-93240
FeatheryMan
2002-11-10 17:17
2002.11.28
Office+Delphi?


1-93049
menel
2002-11-19 15:23
2002.11.28
Как в ListBox загрузить из текстового файла...





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