Уроки, алгоритмы, программы, примеры

Вход на сайт

Материалы по разделам

Построения
на плоскости (2D)
Графика
в пространстве (3D)
Вычислительная
геометрия
Физическое
моделирование
Фрактальная
графика

Новые комментарии

добрый день! при попытке компиляции выдает Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPointSize" 1>Source.obj : error LNK2001: неразрешенный внешний символ "__imp_glPopMatrix" 1>Source.obj : error LNK2001: неразрешенный...
Можно точно вот эту программу просто наоборот типа:4,3,2,1,4 вот так надо двигаться
Здравствуйте. Спасибо за полезную инфу про уравнения а не матрицы. Во всём интернете только матрицы. У Вас опечатка в уравнении вращения по Z в координате Y= надо минус добавить И ещё. Все предыдущие уравнения можно подставить в последнее уравнение...
WebGL API Tutorial WebGL wiki Adding 2D content to a WebGL context

Счетчики и рейтинг

Рейтинг@Mail.ru Яндекс.Метрика
Скриншот к примеру
Среда программирования: 
Code::Blocks
Код программы: 

#include <gl\glut.h>
#include <cmath>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <memory.h>
#include <windows.h>
#include <map>
using namespace std;
 
double mov = 0;
 
struct point {double x, y, vx, vy, c1, c2, c3;}; //координаты, направление движения и цвет точки
int dots = 50000; //количество точек
vector<point> points; //вектор двигающихся точек
vector<point> stopped; //вектор статичных точек
int matrix[500][500]; //матрица точек на экране
 
void Draw(void)
{
  glClear(GL_COLOR_BUFFER_BIT);
 
    for(auto i = points.begin(); i != points.end(); i++){
        i->c1 = (double)(rand()%100)/100; //-------------------
        i->c2 = (double)(rand()%100)/100; //изменение
        i->c3 = (double)(rand()%100)/100; //цвета точки
            glColor3f(i->c1, i->c2, i->c3);      //-------------------
  glBegin(GL_POINTS);
    if(i->x+i->vx >= 0 && i->x+i->vx < 400) //перемещение точки по х
        i->x += i->vx;
    if(i->y+i->vy <= 0 && i->y+i->vy > -400)//перемещение точки по у
        i->y += i->vy;
    glVertex2f(i->x, i->y);       //прорисовка точки
 
    if(i->vx != 0){                        //изменение направления движения точки
    i->vx = pow(-1, rand()%2);
    i->vy = pow(-1, rand()%2);
    }
  glEnd();
    }
 
    for(auto i = stopped.begin(); i != stopped.end(); i++){ //прорисовка дерева
            if(i==stopped.begin()) continue;
            glColor3f(i->c1, i->c2, i->c3);
            glBegin(GL_LINES);
            glVertex2f(i->x, i->y);
            glVertex2f(i->vx, i->vy); // рисуем линию от одной остановленной точки до другой
            glEnd();
    }
    int ind = 0;
    for(auto i = points.begin(); i != points.end(); i++, ind++){
        int x = i->x, y = -1*(i->y);
        int flag = 0;
        for(int a = -1; a <= 1; a++){
            for(int b = -1; b <= 1; b++){
                if(x+a >= 0 && x+a < 400 && y+b >=0 && y+b <400) //если не вышли за границы экрана
                if(matrix[x+a][y+b]){ //если есть статичная точка вокруг не статичной
                        cout << "touched\n";
                    auto par = stopped[matrix[x+a][y+b]-1];//статична точка точка
                    point e;
                    e.x = i->x;
                    e.y = i->y;
                    e.vx = par.x;
                    e.vy = par.y;
                    if(matrix[x+a][y+b] != 1){ //меняем цвет новой статичной точки
 
                        e.c1 = 0.9*par.c1+0.1*i->c1;
                        e.c2 = 0.9*par.c2+0.1*i->c2;
                        e.c3 = 0.9*par.c3+0.1*i->c3;
                    } else {
                        e.c1 = i->c1;
                        e.c2 = i->c2;
                        e.c3 = i->c3;
                    }
                    stopped.push_back(e); //добавляем в массив статичных точек
                    points.erase(i); //удаляем из массива точек
                    i--;
                    flag = 1;
                    break;
                }
            }
            if(flag) break;
        }
        if(flag)
        matrix[x][y] = stopped.size(); //запоминает номер точки в массиве статичных точек
 
 
    }
 
 
  glFlush();
  glutSwapBuffers();
}
void Timer(int value){
glutPostRedisplay();
glutTimerFunc(50, Timer, 0);
 
}
 
int main(int argc, char *argv[])
{
    srand(time(0));
 
    point n;  //
n.x = 200;  //
n.y = -200; //
n.vy = 0;    //
n.vx = 0;    //центральная статичная точка
n.c1 = 1.0f;//
n.c2 = 0.0f;//
n.c3 = 0.0f;//
matrix[200][200] = 1;
 
stopped.push_back(n);
 
    for(int i = 0; i < dots; i++){ //инициализация двигающихся точек
        point p;
        p.x = rand()%400;
        p.vx = pow(-1, rand()%2);
        p.vy = pow(-1, rand()%2);
        p.y = -rand()%400;
        p.c1 = (double)(rand()%100)/100;
        p.c2 = (double)(rand()%100)/100;
        p.c3 = (double)(rand()%100)/100;
        int x = p.x, y = -p.y;
        points.push_back(p);
    }
  glutInit(&argc, argv);
  glutInitWindowSize(400, 400);
  glutInitWindowPosition(100, 100);
 
  glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
  glutCreateWindow("lab");
 
  glutReshapeFunc(Reshape);
  glutDisplayFunc(Draw);
  glClearColor(0, 0, 0, 0);
  glutPassiveMotionFunc(mouseMove);
glutTimerFunc(5, Timer, 0);
  glutMainLoop();
  return 0;
}