Форум: "Потрепаться";
Текущий архив: 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.47 MB
Время: 0.007 c