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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.05.2013, 10:06
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 11  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>дистанции сортировать и брать первую(наименьшую), но возникла проблема - как узнать от какой точки, собственно, эта дистанция..

у штатной сортировки есть опция для выдачи индексов, не трогая сам массив
для этой задачки это:
Код AS3:
private function nearPointIndx():int
{
	return _points.sort(sortFunc, Array.RETURNINDEXEDARRAY)[0];
}
private function sortFunc(a:Point, b:Point):Number
{
	var mouse:Point = new Point(mouseX, mouseY);
	return Point.distance(mouse, a) > Point.distance(mouse, b) ? 1 : -1;
}
но это так, для полноты картины только, как Wolsh предложил поскладнее будет

Старый 13.05.2013, 21:11
Idon'tKnow вне форума Посмотреть профиль Отправить личное сообщение для Idon'tKnow Найти все сообщения от Idon'tKnow
  № 12  
Ответить с цитированием
Idon'tKnow

Регистрация: Apr 2013
Сообщений: 77
Цитата:
Сообщение от Zebestov Посмотреть сообщение
Idon'tKnow, неправда.
Хм, а почему неправда? Допустим есть 2 точки с нереально большими суммами координат по х и по у.

Вот например, как легко ломается нигма на больших значениях:
Тык.

А вот, что мне выдает FD.

Код AS3:
package 
{
	import flash.display.Sprite;
	import flash.events.Event;
 
	public class Main extends Sprite 
	{
 
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
 
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
 
		var num1:Number = 10;
		var num2:Number = 9.9999999999999999;
		trace(num1 == num2); // true
		}
	}	
}
Может, конечно, я что-то пишу неверно, выслушаю критику.

P.S. Я прекрасно понимаю, что таких случаев быть не может на 99.9% , скорее всего, но зачем рисковать?

Старый 13.05.2013, 22:07
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 13  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Цитата:
Сообщение от zuxul Посмотреть сообщение
…можно сравнивать не извлекая корень
Цитата:
Сообщение от Idon'tKnow Посмотреть сообщение
…это может привести к неверному ответу
По твоему мнению, опуская извлечение корня, мы искажаем ответ. Это неправда. Допишу в твой пример одну строчку.
Код AS3:
var num1:Number = 10;
var num2:Number = 9.9999999999999999;
trace(num1 == num2); // true
trace(Math.sqrt(num1) == Math.sqrt(num2)); // true (внезапно)
Вопрос — зачем корни считали?
Важно даже не то, что в 99.9% случаев все будет хорошо, а то, что в 100% случаев это будет несущественно.
__________________
Поймай яблоко 2!

Старый 13.05.2013, 22:42
Idon'tKnow вне форума Посмотреть профиль Отправить личное сообщение для Idon'tKnow Найти все сообщения от Idon'tKnow
  № 14  
Ответить с цитированием
Idon'tKnow

Регистрация: Apr 2013
Сообщений: 77
Zebestov, Да я на горячую голову писал. Думал одно, писал другое. Я писал про то, что операцию корня не нужно использовать, она и может привести к неверному ответу. К нему и приводил примеры, правда сейчас понимаю, что если числа всё равно округляются, то ошибки просто не получится избежать. Точнее, когда я писал

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

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

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


 


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


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