24 / 24 / 11
Регистрация: 28.12.2010
Сообщений: 142
1

Расчет зоны видимости

06.01.2011, 15:07. Показов 1992. Ответов 2
Метки нет (Все метки)

Всем привет!
Столкнулся с проблемой нахождения так называемой зоны видимости.

Имеется некоторая модель поля(карты), которая представляется двумерной сеткой. Также имеется модель юнита, который имеет сектор обзора, заданный радиусом обзора и углом. Мне же нужно получить то множество клеток(элементов поля) которые попадают в поле зрения юнита с учетом типа клеток поля.

Какие способы, методы, алгоритмы можете предложить для попытки реализации моей задачи?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.01.2011, 15:07
Ответы с готовыми решениями:

Ошибка зоны видимости
Доброго времени суток. Ребят пишет ошибку. Т.к как я не могу обртиться из одного метода в другой......

Console.WriteLine вне зоны видимости
Собственно подчёркивает "Console.WriteLine": невозможно использовать локальную переменную "console"...

Создание зоны видимости
Пошаговая игра на двоих. Задумка в следующем: необходимо сделать так, чтобы два объекта друг друга...

Инкапсуляция (зоны видимости атрибутов объекта). Свойства
Замечания: 1. При решении задачи созданные классы разместить в отдельном от программы модуле. 2....

2
821 / 712 / 110
Регистрация: 06.10.2010
Сообщений: 825
Записей в блоге: 1
06.01.2011, 17:36 2
Проверяй, меньше ли расстояние от центра квадрата поля, чем радиус обзора и попадает ли угол между центром этого квадрата и, к примеру, горизонталью в промежуток между направлением взгляда и половинными углами обзора.
угол взгляда: alpha
угол обзора: beta = beta1-beta2
радиус обзора: r
Соответственно:
beta1 = alpha - beta/2
beta2 = alpha + beta/2
Для квадрата 1:
если beta1 < gamma1 < beta2 и r1 < r то квадрат видимый
Расчет зоны видимости
1
24 / 24 / 11
Регистрация: 28.12.2010
Сообщений: 142
07.01.2011, 17:30  [ТС] 3
Лучший ответ Сообщение было отмечено PAVEL_USER как решение

Решение

Спасибо за совет!

Добавлено через 21 час 11 минут
Как вам такой способ?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        float startSect = angleOfVision - sectorOfVision / 2;
        float endSect = angleOfVision + sectorOfVision / 2;
        float rad;
        TFPoint i_point = new TFPoint(0, 0);
        
        // Строим лучи из точки обзора (координат юнита) по всему сектору
        // с определенным шагом
        for (float i = startSect; i <= endSect; i += 1)
        {
            rad = radiusOfVisibility;
            // Проходим по каждому лучу
            // i_point - текущая точка на луче
            for (float j = 1; j <= radiusOfVisibility; j += 1)
            {
                i_point.x = unitPosition.x +  j * (float)Math.Cos(i / 180 * Math.PI);
                i_point.y = unitPosition.y + j * (float)Math.Sin(i / 180 * Math.PI);                
 
                // Если значение rad позволяет "смотреть дальше",
                // то добавляем клетку карты в список видимых клеток
                if (rad > 0) visPoints.Add(i_point); else break;
 
                // Учитываем "тип местности" 
                rad -= (surface[(int)i_point.x, (int)i_point.y].perOfVisible);
            }
        }
Недостатком является не высокая скорость работы и дублирование некоторых значений в списке видимых клеток.

Что скажите по поводу предложенного метода?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.01.2011, 17:30
Помогаю со студенческими работами здесь

При скроле показывать блок, ровно в тот момент, когда исчезает из зоны видимости заголовок
Суть задачи: Есть некая страничка с динамическим контентом, есть заголовок h1. Необходимо в тот...

Расчет стоимости проезда в электропоезде в зависимости от зоны станции назначения
Составить программу расчета стоимости проезда в электропоезде в зависимости от зоны станции...

зоны
Есть сайт на российском хостинге, но домен в зоне ком. сайт русскоязычный. хоть какая-то разница...

Зоны Френеля
Между точечным источником с длиной волны 500 нм и экраном находится диск диаметром 2 мм. Расстояние...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru