home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1997 #3
/
amigamamagazinepolishissue03-1
/
ma_1995
/
07
/
ami003a
< prev
next >
Wrap
Text File
|
1997-04-15
|
3KB
|
234 lines
/**********************************************************/
/* Program liczy rozkîad potencjaîu (np. grawitacyjnego) */
/* Napisane dla Magazynu Amiga (c) 1995 by BsZ */
/**********************************************************/
#include <ctype.h>
#include <fctype.h>
#include <functions.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <exec/types.h>
#include <intuition/intuition.h>
#include <time.h>
#define DEPTH 4
#define COLORS 16
#define WIDTH 640
#define HEIGHT 512
#define N_MAX 1000 /* maksymalna iloôê punktów */
struct Screen *scr;
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct NewScreen scr_data={
0,0,WIDTH,HEIGHT,DEPTH,1,1,HIRES|LACE,CUSTOMSCREEN,0,
(UBYTE *)"Pole",0,0};
int N,X,Y,x[N_MAX],y[N_MAX],m[N_MAX];
float BRIGHT;
void niedobrze(void)
{
if (scr) CloseScreen(scr);
if (GfxBase) CloseLibrary((struct Library *)GfxBase);
if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
exit(0);
}
float RND(void)
{
return (float)(rand()/(float)RAND_MAX);
}
void losuj(void)
{
int licznik;
long int t;
time(&t);
srand((UWORD)t);
for(licznik=0;licznik<N;licznik++)
{
x[licznik]=(int)(RND()*639+1);
y[licznik]=(int)(RND()*511+1);
m[licznik]=(int)(RND()*29+1);
}
}
void OpenAllLibraries(void)
{
IntuitionBase=(struct IntuitionBase *)OldOpenLibrary("intuition.library");
if (!IntuitionBase) exit(100);
GfxBase=(struct GfxBase *)OldOpenLibrary("graphics.library");
if (!GfxBase) exit(100);
}
void paleta(void)
{
ULONG i;
for(i=0;i<COLORS;i++)
SetRGB4(&scr->ViewPort, i, i, i, i);
}
int kolor(float c)
{
if(BRIGHT*c>15.0)
return 15;
else
return (int)(BRIGHT*c);
}
float v(int index)
{
float r;
if( (x[index]==X) && (y[index]==Y) ) return 1000.0; /* biaîy */
r=(float)(sqrt( (double)( (x[index]-X)*(x[index]-X)+(y[index]-Y)*(y[index]-Y))));
return( (float)(m[index]/r) );
} /* v() */
void main()
{
int i;
float tempv;
printf("Podaj iloôê punktów ");
scanf("%d",&N);
printf("Podaj jasnoôê ");
scanf("%f",&BRIGHT);
losuj();
OpenAllLibraries();
if(!(scr=OpenScreen(&scr_data))) niedobrze();
paleta();
SetRast(&scr->RastPort,0);
for(Y=1;Y<=HEIGHT;Y++)
{
if(scr->MouseX<5 && scr->MouseY<5)
{
niedobrze();
break;
}
for(X=1;X<=WIDTH;X++)
{
tempv=0.0;
for(i=0;i<N;i++)
tempv+=v(i);
SetAPen(&scr->RastPort,kolor(tempv));
WritePixel(&scr->RastPort,X,Y);
}
}
for(;;)
{
if(scr->MouseX<5 && scr->MouseY<5)
{
niedobrze();
break;
}
}
}