Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как нарисовать трехмерную сеть из кубиков с векторными ребрами

21K
13 июля 2009 года
DeamonShan
65 / / 14.05.2008
Как нарисовать трехмерную сеть из кубиков с векторными ребрами??? На каждую вершину 3 вектора направляеются, а 2 отправляются.
47K
13 июля 2009 года
Sashok123
18 / / 01.07.2009
Не понятно "3 вектора направляеются, а 2 отправляются."
Как рисовать? Под winapi? OpenGL? DirectX?
Если рисовать под winapi, то придется узнать об операторах проецирования (об этом почти в любом учебнике по аналитической геометрии). DirectX и OpenGL отгородят от математики, но придется либо вручную разбираться с инициализацией, либо использовать готовые проекты (OpenGL могу посоветовать уроки от NeHe).
21K
14 июля 2009 года
DeamonShan
65 / / 14.05.2008
Нужна математика. Сетку в графическом виде не нужно рисовать. Нужны только координаты вершин. Причем координаты в трехмерной системы координат (x,y,z). Проецировать на плоскость тоже не нужно.

С векторами потом разберемся.
47K
14 июля 2009 года
Sashok123
18 / / 01.07.2009
А в чем проблема? В заполнении координат вершин? Если так, то нужно 3 цикла по каждой компоненте. Как хранятся данные? В виде одномерного массива? В виде трехмерного массива?
21K
14 июля 2009 года
DeamonShan
65 / / 14.05.2008
Проблема в заполнении координат вершин.

Как понять 3 цикла по каждой компоненте? Если можно код приведите плиз, на любом языке...желательно на Си.

Хранить буду в базе данных, но это не важно.мне главное иметь большую сетку из, скажем, 1000 вершин.
47K
14 июля 2009 года
Sashok123
18 / / 01.07.2009
[FONT="Courier New"]
функция создает одномерный массив вершин, с координатами в узлах сетки. Сетка заключена в кубике со сторонами равными 1. Индекс вершины в узле, характеризуемом параметрами i, j, k вычисляется по формуле index = i + j*xDiv + k*xDiv*yDiv.
void razbienie(int nn, int kk, int mm)
{[INDENT]
int xDiv = nn; // |__|__|__| nn = 3
int yDiv = kk; // разбиение
int zDiv = mm;//

int N = xDiv*yDiv*zDiv; // количество вершин

vertex* VMassiv = new vertex[N]; // vertex имеет координаты


int k;
int j;
int i;
for(k = 0; k < zDiv; k++)
{
[INDENT]for(j = 0; j < yDiv; j++)
{
[INDENT]for(i = 0; i < xDiv; i++)
{
int index;
index = i + j*xDiv + k*xDiv*yDiv;
VMassiv[index].x = (float)i/(xDiv-1);
VMassiv[index].y = (float)j/(yDiv-1);//нормировка на 1
VMassiv[index].z = (float)k/(zDiv-1);

}[/INDENT] }[/INDENT] }[/INDENT]}
[/FONT]

Там могут быть некоторые неточности, потому что код пришлось кастрировать.
Но проще сделать трехмерный массив и аналогичным образом, но без вычисления индекса, а напрямую вроде VMassiv[j][k].x = ...
Для формирования ребер, нужно лишь понять какие вершины (с какими индексами) соединены и в каком направлении.
Можно, например создать структуру
struct edge
{
vertex* v1;
vertex* v2;
edge* next;
};
И сформировать список, каждый элемент которого будет представлять направленное соединение.
21K
15 июля 2009 года
DeamonShan
65 / / 14.05.2008
Цитата:
VMassiv[index].x = (float)i/(xDiv-1);
VMassiv[index].y = (float)j/(yDiv-1);//нормировка на 1
VMassiv[index].z = (float)k/(zDiv-1);



вместо этого я написал

VMassiv[index].x = i;
VMassiv[index].y = j;
VMassiv[index].z = k;

Так как при нормировке на 1, при количестве вершин в 1000, координаты получаются не совсем правильные...

А от куда формула индекса???

47K
15 июля 2009 года
Sashok123
18 / / 01.07.2009
Ну если подумать, как заполняется большой куб вершинами, то так и должно получиться. Сначала представляешь, как заполнить двухмерный массив, а потом этими "слоями" заполняешь трехмерный. Но я эту формулу где-то еще видел, на форуме на каком-то, тема была что-то вроде представление многомерных массивов в виде одномерного
21K
16 июля 2009 года
DeamonShan
65 / / 14.05.2008
Sashok123, тебе огромное спасибо!!!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог