Программирование: C#: Алгоритмы создания изображений

(Для всех) Конкретное описание ближайших дел по проекту.
Аватара пользователя
Snake_B
MOSC Team
Сообщения: 285
Регистрация: 25 янв 2011

Программирование: C#: Алгоритмы создания изображений

Сообщение Snake_B »

потому что просто не вижу, а что же тут делать программисту?

Есть новое задание, для желающих как то помочь развитию проекта...
Задачи не будут привязаны к языку программирования, так что можно даже словами и формулами написать как такое сделать...

Задачи:

1. для затемнение карты ландшафта вне зоны видимости колоний.
размер изображения (1024х512)
есть точки, у каждой задан свой радиус, на основе этих данных (положение точки и радиус) надо закрасить места на картинке (В юнити закрашиваются по пиксельно).

2. индикатор постройки юнита (или чего там)...
размер изображения (64х64)
на основе процентных данных (0-100) закрасить часть картинки...
закрасить надо по принципу часов... т.е... если значение равно:
25% - закрашивается по линиям: центр картинки (32 - 32) - средина верха (0 - 32), центр картинки (32 - 32) - средина справа (64 - 32)

50% - закрашивается по линиям: центр картинки (32 - 32) - средина верха (0 - 32), центр картинки (32 - 32) - средина снизу (32 - 64)

75% - закрашивается по линиям: центр картинки (32 - 32) - средина верха (0 - 32), центр картинки (32 - 32) - средина слева (0 - 32)

писать стоит тем, кто имеет какое то представление о программировании... я думаю если какие то знания есть, то проблем с этими алгоритмами много не будет...
Изображение
Slimper
Сообщения: 101
Регистрация: 25 янв 2011

Программирование: C#: Алгоритмы создания изображений

Сообщение Slimper »

Snake_B писал(а): 07 янв 2012, 02:421. для затемнение карты ландшафта вне зоны видимости колоний.
размер изображения (1024х512)
есть точки, у каждой задан свой радиус, на основе этих данных (положение точки и радиус) надо закрасить места на картинке (В юнити закрашиваются по пиксельно).

размер изображения (1024х512) - это получается как бы карта всей колонизируемой планеты, что вроде такого?
Изображение

2. индикатор постройки юнита (или чего там)...


Имеешь виду круговой индикатор вида?
Аватара пользователя
Snake_B
MOSC Team
Сообщения: 285
Регистрация: 25 янв 2011

Программирование: C#: Алгоритмы создания изображений

Сообщение Snake_B »

1. да, карта всей планеты...
Изображение

2. не совсем... если кто помнит индикацию постройки в серии C&C, по крайней мере в ранних играх серии, как сейчас не знаю...
что то вроде такого:
Изображение
Изображение
Аватара пользователя
Snake_B
MOSC Team
Сообщения: 285
Регистрация: 25 янв 2011

Программирование: C#: Алгоритмы создания изображений

Сообщение Snake_B »

вот если кому интересно пример обработки текстуры в юнити:

Код: Выделить всё

 Texture2D texture = new Texture2D(128, 128);

int y = 0;
while (y < texture.height) {
int x = 0;
while (x < texture.width) {
Color color = ((x & y) ? Color.white : Color.gray);
texture.SetPixel(x, y, color);
++x;
}
++y;
}
texture.Apply();
Изображение
Slimper
Сообщения: 101
Регистрация: 25 янв 2011

Программирование: C#: Алгоритмы создания изображений

Сообщение Slimper »

Snake_B писал(а): 07 янв 2012, 02:42
Есть новое задание, для желающих как то помочь развитию проекта...
Задачи не будут привязаны к языку программирования, так что можно даже словами и формулами написать как такое сделать...
2. индикатор постройки юнита (или чего там)...
размер изображения (64х64)
на основе процентных данных (0-100) закрасить часть картинки...
закрасить надо по принципу часов... т.е... если значение равно:


Ну знаний в программировании маловато, а как работает от рисовка в Unity вообще не знаю, исходя из (В юнити закрашиваются по пиксельно) и
Изображение

Решил написать на C# консольное приложение эмитирующее это процесс, прошу сильно не пинать, код как сам вижу довольно корявый
Код

Код: Выделить всё

static int[,] AAA(int r, double z)

{
// r - размер массива
//z - значение выполненой пзадачи в 0-100%
if ((r < 4) | (r > 2048))
r = 64;
int[,] arr = new int[r, r]; // создание квадратного массива
if (z < 0)
z = 0;
if (z > 100)
z = 100;
double t = z * 3.6; // перевод процентов в градусы
int kv = 1; // квадрант в декартовой системе координат
while (t > 90)
{
kv++;
t = t - 90;
}
double k;
if (t == 90) // исключение деления на ноль
k = 100;
else
{
double al = Math.Sin(Math.PI * t / 180);
double bet = Math.Sin(Math.PI * (90 - t) / 180);
k = al / bet;
}

int centr = r / 2;
double pr = 0; // правая граница расчетная
double lr = 0; // левая граница расчетная
bool vn = true;
int x = 0;
while (x < r)
{
pr = r;
switch (kv) // в каждом квадранте граничные увловия расчитываются по разному
{
case 1:
pr = (centr - x) * k + centr;
break;
case 2:
if (x >= centr)
{
pr = centr - (centr - x) * 1 / k;
vn = false;
}
break;
case 3:
if (x >= centr)
{
pr = (centr - x) * k + centr;
vn = false;
}
break;
case 4:
if (x <= centr)
lr = centr - (centr - x) * 1 / k;
break;
}
int l = (int)Math.Round(lr); // правая граница номер пикселя
int p = (int)Math.Round(pr); // левая граница номер пикселя
int y = 0;
while (y < r)
{
if ((y < l) | (y >= centr) & (y < p) & vn | (y >= p) & !vn)
//Значение затененнго пикселя
arr[x, y] = 1;
else
// значение изначального пикселя картинки
arr[x, y] = 0;
y++;
}
x++;
}
return arr;
}


Вот результат
Изображение
0 - это эмитирует фон.
1- это эмитирует закрашивание области

Прилагаю исполняемый файл, если кому интересно попробовать :o
Scampada
Сообщения: 51
Регистрация: 04 дек 2011

Программирование: C#: Алгоритмы создания изображений

Сообщение Scampada »

1. для затемнение карты ландшафта вне зоны видимости колоний.
размер изображения (1024х512)
есть точки, у каждой задан свой радиус, на основе этих данных (положение точки и радиус) надо закрасить места на картинке (В юнити закрашиваются по пиксельно).

Так уже разобрались или нет еще?
Не совсем курю: карта будет дискретная (клеточками) или непрерывная?
Если клеточками, то там вообще все просто. Если непрерывная, то там... Ну хотя бы закрашивать невидимые области черным цветом, ЕСЛИ они не попадают внутрь радиуса видимости?
Аватара пользователя
Snake_B
MOSC Team
Сообщения: 285
Регистрация: 25 янв 2011

Программирование: C#: Алгоритмы создания изображений

Сообщение Snake_B »

Scampada писал(а): 10 янв 2012, 18:08Так уже разобрались или нет еще?
Не совсем курю: карта будет дискретная (клеточками) или непрерывная?
Если клеточками, то там вообще все просто. Если непрерывная, то там... Ну хотя бы закрашивать невидимые области черным цветом, ЕСЛИ они не попадают внутрь радиуса видимости?


выше есть пример обработки текстуры...
вот возьмите и сделайте.. если там всё просто, то думаю будет не трудно? )
Изображение
Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

Программирование: C#: Алгоритмы создания изображений

Сообщение Vasaka »

Scampada писал(а): 10 янв 2012, 18:08Не совсем курю: карта будет дискретная (клеточками) или непрерывная?

Непрерывная.


Scampada писал(а): 10 янв 2012, 18:08Если непрерывная, то там... Ну хотя бы закрашивать невидимые области черным цветом, ЕСЛИ они не попадают внутрь радиуса видимости?

Лучше немного затемнять. Но это в идеале.
Нужно же видеть, что ещё есть на планете.
mydmitry
Сообщения: 5
Регистрация: 06 сен 2012

Программирование: C#: Алгоритмы создания изображений

Сообщение mydmitry »

Всем привет. Классный проект. С удовольствием помогу Вам чем нибудь. Правда не очень много могу ;)

Что у Вас с автогенерацией ландшафтов например? У меня есть вот такие могу поделиться если нужно
http://sourceforge.net/projects/stellaradvent
Закрыто