|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
пересечение окружностей - неправильный результат
Здравствуйте! Проблема в следующем: нарисовал две окружности в диаметре 100. Проверил пересечение математически - все работает отлично! Далее изменил масштаб одной из окружностей до 140 - и флеш выдавал пересечения, даже если его не было визуально... не могу понять, где ошибка...
var radius_1:Number = circle_1.width/2; //диаметр 100 var radius_2:Number = circle_2.width/2; //диаметр 100 - затем 140 var sum:Number = radius_1 + radius_2; var distance:Number; addEventListener(Event.ENTER_FRAME, updateFrame); stage.addEventListener(MouseEvent.CLICK, onClick); circle_1.addEventListener(MouseEvent.CLICK, onCircleClick); function onClick(e:MouseEvent):void { trace(distance); } function updateFrame(e:Event):void { var xDistance = circle_2.x - circle_1.x; var yDistance = circle_2.y - circle_1.y; var point:Point = new Point(xDistance,yDistance); distance = point.length; if(distance < sum) { trace("КОСНУЛОСЬ"); } } function onCircleClick(e:MouseEvent):void { circle_1.startDrag(); } |
|
|||||
Регистрация: Feb 2009
Сообщений: 141
|
Не смотря на то что визуально объекты окружности, по факту вы проверяете касание для прямоугольных объектов, соответственно, если углы этих объектов слегка пересекутся, то выполнится условие if(distance < sum), а окружности на самом деле не коснулись друг друга.
Ваши вычисления рассчитывают касание квадратов, в которые вписаны ваши окружности. |
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
Если не ошибаюсь, то радиус окружности вписанной в квадрат(а это флеш делает автоматом), равен width/2 (диаметр окружности/2)... и в условии проверяется все верно...если дистанция между кругами < сумме их радиусов, то есть пересечение...
П.С. проблемы пересечения не с углами...даже поднося их бок к боку - выскакивает раньше времени! |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
А (0, 0) (точка привязки) где у окружностей находится? Как и положено, в центре? Или в каком-нибудь левом верхнем углу?
|
|
|||||
эээ
1) distance = Math.sqrt(xDistance * xDistance + yDistance * yDistance); 2) Point.distance(); http://help.adobe.com/ru_RU/FlashPla...html#distance() Добавлено через 1 минуту Хотя все зависит от того как вы рисовали.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
Цитата:
Добавлено через 45 секунд Цитата:
Добавлено через 7 минут Заработало! GBee, те пункты...я так полагаю, они для программно-нарисованных окружностей? Хотя, и от руки окружности тоже можно приспособить...но в перспективе все же, круги будут рисоваться программно! Спасибо. |
|
|||||
Не хочу вырывать вас из мира грез, но первый пункт вы знать должны были, ну или хотя бы знать, что он есть. Ну или хотя бы подозревать.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
Да, чтот вылетел Пифагор из головы...поправил код! Всяко сподручнее, чем с векторами играться...
|
Часовой пояс GMT +4, время: 16:34. |
|
« Предыдущая тема | Следующая тема » |
|
|