FuzzyLogic
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору max0z Если задано откуда стрелять, тогда решается так (для 2D): Пусть есть N планет 1. Для каждой планеты, находим две касательных, проходящих через звезду (см. любую книжку по аналитической геометрии как это сделать) 2. Каждая и этих касательных однозначно определяется углом (угол допустим, относительно оси x). Таким образом, для каждой планеты мы нашли интервал [угол1,угол2] в который надо стрелять чтобы попасть в планету. 3. Располагаем все эти интервалы на отрезке [0,360градусов] и ищем интервал который пересекает максимальное кол-во интервалов [угол1,угол2]. Делается это элементарно - сортируем все углы по возрастанию, а потом просто пробегаем по ним, ведя счетчик: если угол является углом1 (то есть начало интервала для одной из планет), то счетчик увеличивается, иначе - уменьшается. Таким образом мы выделим интервал на котором значение счетчика максимально (счетчик - колво сбитых планет), в любом направлении из этого интервала можно стрелять. Кстати, тут надо учесть что интервал у нас "зацикленный", т.е. может получиться так что некоторые интервалы откроются, но не закроются. Но это уже тонкости реализации. Добавлено: Цитата: интерестно почему алгоритм работать не будет ? | А как вы собрались определять шаг (почему полградуса?) одна планета может иметь радиус 1000000 единиц, а другая 0.000001, тоже самое и с расстояниями ... и чего делать? Добавлено: max0z я вам даже картинку нарисовал Представьте что эти прямые выходят из одной точки (звезды смерти), которая находится далеко (внизу-слева) и угол между этими прямыми 0.00000001 градуса Добавлено: KADABRA Цитата: Ну подскажите как сделать просто |