Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 06.03.2013, 00:10
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 1  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
Question пересечение окружностей - неправильный результат

Здравствуйте! Проблема в следующем: нарисовал две окружности в диаметре 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();
}
Спасибо!

Старый 06.03.2013, 00:29
Vreden вне форума Посмотреть профиль Отправить личное сообщение для Vreden Найти все сообщения от Vreden
  № 2  
Ответить с цитированием
Vreden
 
Аватар для Vreden

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

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

Старый 06.03.2013, 00:37
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 3  
Ответить с цитированием
vitamin4er

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

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

Старый 06.03.2013, 01:11
maxkar вне форума Посмотреть профиль Отправить личное сообщение для maxkar Найти все сообщения от maxkar
  № 4  
Ответить с цитированием
maxkar

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

Старый 06.03.2013, 01:37
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 5  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
эээ
1) distance = Math.sqrt(xDistance * xDistance + yDistance * yDistance);

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

Добавлено через 1 минуту
Хотя все зависит от того как вы рисовали.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 06.03.2013, 02:01
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 6  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
Цитата:
Сообщение от GBee Посмотреть сообщение
эээ
1) distance = Math.sqrt(xDistance * xDistance + yDistance * yDistance);

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

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

Добавлено через 45 секунд
Цитата:
Сообщение от maxkar Посмотреть сообщение
А (0, 0) (точка привязки) где у окружностей находится? Как и положено, в центре? Или в каком-нибудь левом верхнем углу?
ТОЧНО! Что-то не пришло мне это на ум...Спасибо!

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

Старый 06.03.2013, 11:29
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 7  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Не хочу вырывать вас из мира грез, но первый пункт вы знать должны были, ну или хотя бы знать, что он есть. Ну или хотя бы подозревать.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 06.03.2013, 20:31
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 8  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
Да, чтот вылетел Пифагор из головы...поправил код! Всяко сподручнее, чем с векторами играться...

Создать новую тему Ответ Часовой пояс GMT +4, время: 16:34.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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