Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

ТЕМА: Предложения новых проектов для Марсоходов.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6431

Очень быстро летают.

Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6432

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
А какая версия VS? У меня тела рисуются кружочками только в WinXP, в Win10 - квадратиками (компилирую в VC98).
И насколько быстро, не уследить (физика вроде правильно моделируется) ?
У меня "комфортная" скорость для "планет", а вот моделирование "земной физики" (потом выложу, доделать надо) сильно тормозит...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6433

А какая версия VS? У меня тела рисуются кружочками только в WinXP, в Win10 - квадратиками (компилирую в VC98).

Visual Studio Community 2015
Есть 2 компа с Win10. На одном - кружочки и очень быстро,
на другом - квадратики и медленно.

И насколько быстро, не уследить (физика вроде правильно моделируется) ?

~2 сек и остались 2 - 3 планетоида.
Спасибо сказали: Leka

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Ynicky.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6434

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

Ynicky пишет: Есть 2 компа с Win10. На одном - кружочки и очень быстро,
на другом - квадратики и медленно.

Понятно, значит у меня медленно и в WinXP (кружочки), и в Win10 (квадратики). Наверно, от драйверов зависит.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6435

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54

Ynicky пишет: ~2 сек и остались 2 - 3 планетоида.

Понятно, очень большая разница в скорости, надо разбираться.

Кстати, 2d - только набросок, но чтобы было понятно, что хочу моделировать.
(если glut, а не freeglut, то просто раскомментировать строку в 2d.c
Клавиатура: пробел - запуск, enter - сброс)
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6436

Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6437

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Мне ошибка непонятна, в VS не работаю, компилирую в консоли.
Один раз запускаю vs.bat:
set MSVCDir=C:\VC98
set PATH=%MSVCDir%\BIN;%PATH%
set INCLUDE=%MSVCDir%\INCLUDE;%INCLUDE%
set LIB=%MSVCDir%\LIB;%LIB%

А потом vc.bat:
cl %1.c
del %1.obj

- с именем исходника, например:
vc 2d

Пробовал взять от VS 2015 только компилятор (папка VC), но там не оказалось привычных include файлов, например math.h...
В итоге снес этого монстра (VS 2015), и вернулся на VC98.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6438

Сделал как у Вас.
Эффект аналогичен.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6439

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Наверно, это связано с файловыми операциями.
Переделал 2d.c под консольный ввод файла: 2d.exe < 0.txt
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <GL/freeglut.h>
//#include <GL/glut.h>
#define NMAX 4000
#define PMAX 1000000
int N=2000;
int T=1;
int P=100;
int Width=1200, Height=900;
int Z[NMAX], Zii[NMAX], Zjj[NMAX]; //слои и связи
double VX[NMAX], VY[NMAX], X[NMAX], Y[NMAX],  VX0[NMAX], VY0[NMAX], X0[NMAX], Y0[NMAX];

double R0=20.0;
double R1=20.0;

void nbodyinit( ) {
	static int i;
	for(i=0;i<N;i++){
		VX[i]=VX0[i];
		VY[i]=VY0[i];
		X[i]=X0[i];
		Y[i]=Y0[i];			
	}
}	
	
	
void nbodyread( ) {
	static int i,j,ii,jj,i0,j0;
	static double x,y,r;
	static char c;
	//FILE *f; 
	for(j=0;j<150;j++) { i=j; X[i]=-490; Y[i]=390-5*j; }
	for(j=0;j<150;j++) { i=j+150; X[i]=490; Y[i]=390-5*j; }
	for(j=0;j<200;j++) { i=j+300; X[i]=5*j-495; Y[i]=380; }
	for(j=0;j<200;j++) { i=j+500; X[i]=5*j-495; Y[i]=-340; }
	for(i=0;i<700;i++) { VX[i]=0; VY[i]=0; Z[i]=2; Zii[i]=-3; Zjj[i]=-3; }
	for(i=700;i<N;i++) {
		VX[i]=1.0;
		VY[i]=1.0;		
		Z[i]=3;	
		Zii[i]=-3; Zjj[i]=-3;		
	}	
	j=700;
	
	//f=fopen("0.txt","r");	
	//fscanf(f,"%i %i \n",&i0,&j0);
	scanf("%i %i \n",&i0,&j0);
	//for(ii=0,jj=0,c=' ';c!='-';fscanf(f,"%c",&c)) {
	for(ii=0,jj=0,c=' ';c!='-';scanf("%c",&c)) {
		if(c=='\n'){ jj++; ii=0; } else ii++;
		if(c=='0'){ 
			x=(i0+ii)*0.5*R1;
			y=(j0-jj)*R1*sqrt(3)*0.5;
			X[j]=x-600.0; Y[j]=y-450.0;
			Zii[j]=ii; Zjj[j]=jj;
			j++;	
		}
	}
	//fclose(f);
	
	N=j; printf("N=%d\n",N);	
	for(i=0;i<N;i++){
		VX0[i]=VX[i];
		VY0[i]=VY[i];
		X0[i]=X[i];
		Y0[i]=Y[i];			
	}
}


void nbodystep( ) {
static double x,x0,x1,x2,y,y0,y1,y2,r0,r1,r2;	
static int i, j, jj, z, z0, zii, zjj, zii0, zjj0;
    /**/
	for(i=700;i<(N-1);i++) {
		x0=X[i]; y0=Y[i]; z0=Z[i]; zii0=Zii[i]; zjj0=Zjj[i];  	
		for(j=701;j<N;j++) {
			x=X[j]; y=Y[j]; z=Z[j]; zii=Zii[j]; zjj=Zjj[j];   
			if( 
				( (zii==(zii0-1)) && (zjj==(zjj0+1)) ) || 
				( (zii==(zii0+1)) && (zjj==(zjj0+1)) ) || 
				( (zii==(zii0+2)) && (zjj==(zjj0)) ) 
			)
			{	
				x-=x0; y-=y0;	
				r2=x*x+y*y;
				r1=sqrt(r2);
				r0=1.0/r1;
				r1-=R1; 	
				r1*=r0*0.5;
				x*=r1;  y*=r1; 										
				VX[i]+=x; VY[i]+=y;		
				VX[j]-=x; VY[j]-=y;
			}
		}		
	}	
	/**/
	//for(i=0;i<(N-1);i++) {
	for(i=0;i<700;i++) {
		x0=X[i]; y0=Y[i]; z0=Z[i]; //zii0=Zii[i]; zjj0=Zjj[i];  
		x1=x0-R0; x2=x0+R0; y1=y0-R0; y2=y0+R0;
		//if(i>700) jj=i+1; else jj=701;

		for(j=701;j<N;j++) {
			x=X[j]; y=Y[j]; z=Z[j]; //zii0=Zii[i]; zjj0=Zjj[i];   
			if(z0&z)if(x1<x)if(x2>x)if(y1<y)if(y2>y) {	
				x-=x0; y-=y0;	
				r2=x*x+y*y;
				r1=sqrt(r2);
				if(R0>r1) 
				{
					r0=1.0/r1;

					r1-=R0; 
					
					r1*=r0*0.5;
				
					x*=r1;  y*=r1; 										
					//VX[i]+=x; VY[i]+=y;		
					VX[j]-=x; VY[j]-=y;
				}	
			}
		}
	}
	/**/
	
	for(i=700;i<N;i++) { 
		VX[i]*=0.9989;	
		VY[i]*=0.9989;	
		VY[i]+=-0.002;
		X[i]+=VX[i]; Y[i]+=VY[i];			
	}
}
	
double px[PMAX], py[PMAX]; 
void Display( void ) {
	static int i, t, p;	
	static double x,y,w,h;
	glClearColor( 0, 0, 0, 1 );
	glClear( GL_COLOR_BUFFER_BIT );
	glEnable(GL_POINT_SMOOTH);
	glColor3f( 0.5, 0.5, 0.5 );
	glPointSize( 1 );	
	for(i=0;i<P;i++) {
		glBegin( GL_POINTS );
		glVertex2f( px[i], py[i] );
		glEnd( );			
	}
	t=(t+1)%T;
	w=Width*0.5;
	h=Height*0.5;
	glColor3f( 1, 1, 0 );
	glPointSize( 8.0 );	
	for(i=0;i<N;i++) {	
		glBegin( GL_POINTS );
		x=X[i]+w; y=Y[i]+h;
		glVertex2f( x, y );
		if(t==0){ p=(p+1)%P; px[p]=x; py[p]=y; }
		glEnd( );		
	}			
	glFlush( );
}
void Reshape( int w, int h ) {
	static int i;
	for(i=0;i<P;i++) { px[i]=0; py[i]=0; }	
	Width = w; Height = h;
	glViewport( 0, 0, w, h );
	glMatrixMode( GL_PROJECTION );
	glLoadIdentity( );
	glOrtho( 0, w, 0, h, -1, 1 );
}
int RUN=0;
void Keyboard( unsigned char key, int x, int y ) {
	const char ESCAPE = '\033';
	if( key == ESCAPE ) exit( 0 ) ;
	else if( key == ' ' ) RUN=1;
	else { RUN=0; nbodyinit(); }
}
void idle( void ) {
	static int i;
	if(RUN)// for(i=0;i<10;i++)
		nbodystep( );	
	glutPostRedisplay( );
}
void main( int argc, char* argv[ ] ) {
	static int i;
	i=argc; while(i--) {
		if(argv[i][0]=='n') sscanf(argv[i],"n%d", &N);
		if(argv[i][0]=='t') sscanf(argv[i],"t%d", &T);
		if(argv[i][0]=='p') sscanf(argv[i],"p%d", &P);
	}	
	printf("N=%d\n",N);
	printf("T=%d\n",T);
	printf("P=%d\n",P);
	nbodyread( );
	nbodyinit( );
	glutInit( &argc, argv );
	glutInitDisplayMode( GLUT_RGB );
	glutInitWindowSize( Width , Height );
	glutInitWindowPosition( 10, 10 );		
	glutCreateWindow( "Test" );
	glutDisplayFunc( Display );
	glutReshapeFunc( Reshape );
	glutKeyboardFunc( Keyboard );
	glutIdleFunc( idle );
	glutMainLoop( );
}

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Предложения новых проектов для Марсоходов. 8 года 3 мес. назад #6440

  • Leka
  • Leka аватар
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Сейчас только заметил, в папке должен присутствовать файл 0.txt, тк программа читает из него симулируемую сцену.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.266 секунд
Работает на Kunena форум