|
49 / 44 / 8
Регистрация: 06.09.2010
Сообщений: 419
|
|
Гексагональная сетка с поворотом на 45 градусов01.07.2013, 23:11. Показов 4576. Ответов 9
Метки нет (Все метки)
Мне нужно реализовать такую гексагональную сетку, как в приложении, только угол надо самому регулировать. В задачу входит: нарисовать эту сетку, знать координаты самой гексы и кординаты в пикселах ее центра.
Как нарисовать обычную сетку - вполне можно найти, но как сделать ее кручение по оси Х - не нашел. Доп инфо: реализовывать буду с помощью канвы html5 и javaScript. Если есть другие Варианты - предлагайте, выслушаю (флеш не предлагать, не подходит).
0
|
|
| 01.07.2013, 23:11 | |
|
Ответы с готовыми решениями:
9
Гексагональная сетка (C++ + SFML) Гексагональная сетка, перемещение фишек. |
|
|
||||||
| 02.07.2013, 05:39 | ||||||
|
Я правильно понимаю, что нужно создать эффект трёхмерности?
Допустим, Вы можете нарисовать обычную сетку. Такое рисование сведётся к циклу, в теле которого будет несколько раз вызываться отрисовка отрезка line(x1,y1,x2,y2) — по одной на каждую сторону. Потом Вы мысленно наклоняете изображение. Это соответствует тому, что точка (x,y) переходит в точку (x,y/sqrt(2),z/sqrt(2)). Но хотим вывести на экран проекцию на плоскость (xy), поэтому каждую точку (x,y/sqrt(2),z/sqrt(2)) нужно спроецировать на (xy). Если проекция прямая или косоугольная, то изображение принципиально не изменится: сплюснется по вертикали и сдвинется по горизонтали. Вы, видимо, хотите рассмотреть следующее: каждую точку (x,y,z) соединить с фиксированной точкой (x0,y0,z0), которая лежит по другую сторону плоскости (xy), отрезком и обозначить пересечение его с плоскостью. Я не помню, как называется такой тип проекции. Положим x0=y0=0 и z0 ~ L — размер сетки (она же конечная) или участка, который мы хотим показать. Тогда (x,y,z) проецируется в (x*z0/(z+z0), y*z0/(z+z0)). Итак, точке (x,y) после наклона и поворота соответствует точка (x*z0/(y/sqrt(2)+z0), y*z0/(y+z0 sqrt(2)). Для примера приведу псевдокод (я его не тестировал)
P.S. это называется центральной проекцией.
1
|
||||||
| 02.07.2013, 13:51 | ||
Ладно, будем считать Вы неудачно выразились, по делу:Это просто перспективная проекция, поэтому ничего изобретать не надо, все очень банально - создаете двумерный массив точек в плоскости XY (рисование сетки сводится к соединению точек линиями) x. y меняются от -x_min до +x_max, z = 0 - поворачиваете все точки вокруг оси X на заданный угол alpha (напр 45 градусов) y_new = y * cos(alpha) - z * sin(alpha) z_new = z * cos(alpha) + y * sin(alpha) - затем применяете перспективное преобразование x_new = x * focal_len / (z + distance) y_new = y * focal_len / (z + distance) Где x_new, у_new - координаты в пикселях, а focal_len и distance - параметры перспективной камеры которые нужно определить. Проще всего задать коэффициент k, напр 4. Тогда distance = x_max * k focal_len = screen_width / 2 * (k - fabs(sin(alpha))) Задавая различные "к" Вы меняете эффект перспективы (угол зрения камеры). Ну и переводите в пиксели экрана x_screen = x + screen_width / 2; y_screen = screen_height / 2 - y;
1
|
||
|
49 / 44 / 8
Регистрация: 06.09.2010
Сообщений: 419
|
||
| 02.07.2013, 14:09 [ТС] | ||
|
Спасибо за ответы, буду думать
0
|
||
|
49 / 44 / 8
Регистрация: 06.09.2010
Сообщений: 419
|
|
| 05.07.2013, 11:08 [ТС] | |
|
Igor3D, по Вашему алгоритму я смог нарисовать гексу под углом, но как сделать, чтобы нарисовать так всю сетку?
0
|
|
|
|
|||||||||||
| 05.07.2013, 21:10 | |||||||||||
|
Есть один артефакт, который нужно пофиксить (думаю, Вы его увидите), он связан с переходом точек через горизонт в область, которая глазом не должна видеться. Фиксится аккуратным анализом ситуации в закомментированной строке с «throw "Invisible"».
Кликните здесь для просмотра всего текста
1
|
|||||||||||
|
49 / 44 / 8
Регистрация: 06.09.2010
Сообщений: 419
|
|
| 05.07.2013, 22:11 [ТС] | |
|
Все прекрасно, гексу под углом я смогу вывести, но у меня другая проблема: я не знаю как вывести СЕТКУ под углом. В голове есть пару алгоритмов, но они такие громоздкие (типа проходить по всем гексам, спаривать точки и т.д.), что я не приступаю к реализации.
Добавлено через 56 минут Извиняюсь, проглупил очень сильно, вопрос закрыт) Большое спасибо)
0
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||
| 22.07.2013, 20:31 | ||||||||||||||||||||||||||||||||||||||||||
|
Постановка задачи:
Переход между двумя плоскостями
Из прошлых постов (#2 и #3) имеем формулы прямого перехода
Поиск гексы по точке
Для удобной работы введём ещё одну координатную сетку (u,v), которая проходит через середины трёх гекс.
Свяжем её координаты с исходными:
В первом приближении можно сказать, что косокоординатный номер гексы (round(getHU(x,y)),round(getHV(x,y))). Во втором приближении можно рассмотреть шесть ближайших соседей первого приближения и найти, к какой гексе (к центру) ближе всего рассматриваемая точка.
Каркас программы
Рабочая программа
P.S. у меня, правда, немного подтормаживает.
1
|
||||||||||||||||||||||||||||||||||||||||||
|
49 / 44 / 8
Регистрация: 06.09.2010
Сообщений: 419
|
|
| 22.07.2013, 23:58 [ТС] | |
|
Ого) Спасибо большое)
0
|
|
| 23.07.2013, 19:48 | |||||||
1
|
|||||||
| 23.07.2013, 19:48 | |
|
Помогаю со студенческими работами здесь
10
27'' монитор с поворотом на 90 градусов Проверить, можно ли получить второй массив поворотом первого на 90 градусов Определить все возможные ходы ферзя, с поворотом доски на 180 градусов Пошаговая гексагональная стратегия для нетбука Процессор в простое греется до 68-69 градусов, а под нагрузкой температура падает до 34-35 градусов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|