Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   пересечение окружностей - неправильный результат (http://www.flasher.ru/forum/showthread.php?t=195394)

vitamin4er 06.03.2013 00:10

пересечение окружностей - неправильный результат
 
Здравствуйте! Проблема в следующем: нарисовал две окружности в диаметре 100. Проверил пересечение математически - все работает отлично! Далее изменил масштаб одной из окружностей до 140 - и флеш выдавал пересечения, даже если его не было визуально... не могу понять, где ошибка...

Код AS3:

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();
}

Спасибо!

Vreden 06.03.2013 00:29

Не смотря на то что визуально объекты окружности, по факту вы проверяете касание для прямоугольных объектов, соответственно, если углы этих объектов слегка пересекутся, то выполнится условие if(distance < sum), а окружности на самом деле не коснулись друг друга.

Ваши вычисления рассчитывают касание квадратов, в которые вписаны ваши окружности.

vitamin4er 06.03.2013 00:37

Если не ошибаюсь, то радиус окружности вписанной в квадрат(а это флеш делает автоматом), равен width/2 (диаметр окружности/2)... и в условии проверяется все верно...если дистанция между кругами < сумме их радиусов, то есть пересечение...

П.С. проблемы пересечения не с углами...даже поднося их бок к боку - выскакивает раньше времени!

maxkar 06.03.2013 01:11

А (0, 0) (точка привязки) где у окружностей находится? Как и положено, в центре? Или в каком-нибудь левом верхнем углу?

GBee 06.03.2013 01:37

эээ
1) distance = Math.sqrt(xDistance * xDistance + yDistance * yDistance);

2) Point.distance(); http://help.adobe.com/ru_RU/FlashPla...html#distance()

Добавлено через 1 минуту
Хотя все зависит от того как вы рисовали.

vitamin4er 06.03.2013 02:01

Цитата:

Сообщение от GBee (Сообщение 1123805)
эээ
1) distance = Math.sqrt(xDistance * xDistance + yDistance * yDistance);

2) Point.distance(); http://help.adobe.com/ru_RU/FlashPla...html#distance()

Добавлено через 1 минуту
Хотя все зависит от того как вы рисовали.

Спасибо, учту!

Добавлено через 45 секунд
Цитата:

Сообщение от maxkar (Сообщение 1123803)
А (0, 0) (точка привязки) где у окружностей находится? Как и положено, в центре? Или в каком-нибудь левом верхнем углу?

ТОЧНО! Что-то не пришло мне это на ум...Спасибо!

Добавлено через 7 минут
Заработало! GBee, те пункты...я так полагаю, они для программно-нарисованных окружностей? Хотя, и от руки окружности тоже можно приспособить...но в перспективе все же, круги будут рисоваться программно!
Спасибо.

GBee 06.03.2013 11:29

Не хочу вырывать вас из мира грез, но первый пункт вы знать должны были, ну или хотя бы знать, что он есть. Ну или хотя бы подозревать.

vitamin4er 06.03.2013 20:31

Да, чтот вылетел Пифагор из головы...поправил код! Всяко сподручнее, чем с векторами играться...


Часовой пояс GMT +4, время: 19:57.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.