示例#1
0
void MGL_NO_EXPORT mgl_pie_var37(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal c1=int(mgl_rnd()*par[1] + 0.5), c2;
	c2 = par[2] + 2*M_PI/par[1]*(c1 + mgl_rnd()*par[3]);
	c1 = par[0]*mgl_rnd();
	xNew += c1*cos(c2);	yNew += c1*sin(c2);
}
示例#2
0
void Foo::Calc()
{
	for(int i=0;i<30;i++)   	// do calculation
	{
		long_calculations();	// which can be very long
		pnt.Set(2*mgl_rnd()-1,2*mgl_rnd()-1);
		Gr->Update();			// update window
	}
}
示例#3
0
	void Calc()
	{
		for(i=0;;i++)	// do calculation
		{
			Check();	// check if need pause
			long_calculations();// which can be very long
			pnt.Set(2*mgl_rnd()-1,2*mgl_rnd()-1);
			if(wnd)	wnd->Update();
		}
	}
示例#4
0
int main(int argc,char **argv)
{
	mglFLTK gr("test");
	gr.RunThr();	// <-- need MathGL version which use pthread
	for(int i=0;i<10;i++)	// do calculation
	{
		long_calculations();// which can be very long
		pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);
		gr.Clf();			// make new drawing
		gr.Line(mglPoint(),pnt,"Ar2");
		char str[10] = "i=0";	str[3] = '0'+i;
		gr.Update();		// update window
	}
	return 0;	// finish calculations and close the window
}
示例#5
0
void MGL_NO_EXPORT mgl_juliaScope_var33(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal c1=int(fabs(par[1])*mgl_rnd()), c2;
	c2 = ((2*(rand()%2)-1)*atan2(y,x) + 2*M_PI*c1)/par[1];
	c1 = par[0]*pow(hypot(x,y), par[2]/par[1]);
	xNew += c1*cos(c2);	yNew += c1*sin(c2);
}
示例#6
0
void MGL_NO_EXPORT mgl_twintrian_var47(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal c1=par[0]*x, c2, c3;
	c2 = mgl_rnd()*hypot(x,y)*par[0];
	c3 = log10(sin(c2)*sin(c2)) + cos(c2);
	xNew += c1*c3;	yNew += c1*(c3 - M_PI*sin(c2));
}
示例#7
0
void *calc(void *)
{
	mglPoint pnt;
	for(int i=0;i<10;i++)	// do calculation
	{
		long_calculations();       // which can be very long
		pnt.Set(2*mgl_rnd()-1,2*mgl_rnd()-1);
		if(gr)
		{
			gr->Clf();			// make new drawing
			gr->Line(mglPoint(),pnt,"Ar2");
			char str[10] = "i=0";	str[2] = '0'+i;
			gr->Puts(mglPoint(),str);
			gr->Update();		// update window
		}
	}
	exit(0);
}
示例#8
0
//-----------------------------------------------------------------------------
//
//	IFS series
//
//-----------------------------------------------------------------------------
void MGL_NO_EXPORT mgl_ifs_2d_point(HCDT A, mreal& x, mreal& y, mreal amax)
{
	long i, n=A->GetNy();
	mreal r = amax*mgl_rnd(), sum_prob = 0, x1;
	for(i=0;i<n;i++)
	{
		sum_prob += A->v(6,i);
		if(r<sum_prob)	break;
	}
	x1= A->v(0,i)*x + A->v(1,i)*y + A->v(4,i);
	y = A->v(2,i)*x + A->v(3,i)*y + A->v(5,i);	x = x1;
}
示例#9
0
//-----------------------------------------------------------------------------
void MGL_NO_EXPORT mgl_ifs_3d_point(HCDT A, mreal& x, mreal& y, mreal& z, mreal amax)
{
	int i, n=A->GetNy();
	mreal r = amax*mgl_rnd(), sum_prob = 0, x1, y1;
	for (i=0; i<n; i++)
	{
		sum_prob += A->v(12,i);
		if(r < sum_prob)  break;
	}
	x1= A->v(0,i)*x + A->v(1,i)*y + A->v(2,i)*z + A->v(9,i);
	y1= A->v(3,i)*x + A->v(4,i)*y + A->v(5,i)*z + A->v(10,i);
	z = A->v(6,i)*x + A->v(7,i)*y + A->v(8,i)*z + A->v(11,i);
	x = x1;	y = y1;
}
示例#10
0
//-----------------------------------------------------------------------------
int main(int argc,char **argv)
{
#ifdef PTHREAD_SAMPLE
	mglGraphFLTK gr;
	gr.Window(argc,argv,NULL,"test",0,0);  // create window
	gr.ClfOnUpdate = false;
	static pthread_t tmp;
	pthread_create(&tmp, 0, mgl_fltk_tmp, 0);
	pthread_detach(tmp);    // run window handling in the separate thread
	for(int i=0;i<10;i++)   // do calculation
	{
		sleep(2);             // which can be very long
		pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1);
		gr.Clf();             // make new drawing
		gr.Line(mglPoint(),pnt,"Ar2");
		char str[10] = "i=0";	str[3] = '0'+i;
		gr.Text(mglPoint(),"");
		gr.Update();       // update window
	}
	return 0;   // finish calculations and close the window*/
#else
	mglGraphFLTK gr;
	char key = 0;
	if(argc>1 && argv[1][0]!='-')	key = argv[1][0];
	else	printf("You may specify argument '1', '2', '3' or 'd' for viewing examples of 1d, 2d, 3d or dual plotting\n");
	switch(key)
	{
	case '1':	gr.Window(argc,argv,sample_1,"1D plots");	break;
	case '2':	gr.Window(argc,argv,sample_2,"2D plots");	break;
	case '3':	gr.Window(argc,argv,sample_3,"3D plots");	break;
	case 'd':	gr.Window(argc,argv,sample_d,"Dual plots");	break;
	case 't':	gr.Window(argc,argv,test,"Testing");	break;
	default:	gr.Window(argc,argv,sample,"Example of molecules");	break;
	}
	return mglFlRun();
#endif
}
示例#11
0
文件: mgl_3d.cpp 项目: LuaDist/iup
//-----------------------------------------------------------------------------
void mglGraph::CloudP(const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch, mreal alpha, bool rnd)
{
	register long i,j,k,n=a.nx,m=a.ny,l=a.nz;
	if(n<2 || m<2 || l<2)	{	SetWarn(mglWarnLow,"CloudP");	return;	}
	bool both = x.nx*x.ny*x.nz==n*m*l && y.nx*y.ny*y.nz==n*m*l && z.nx*z.ny*z.nz==n*m*l;
	if(!(both || (x.nx==n && y.nx==m && z.nx==l)))
	{	SetWarn(mglWarnDim,"CloudP");	return;	}
	static int cgid=1;	StartGroup("CloudP",cgid++);

	if(alpha<0)	alpha = AlphaDef;
	if(sch && strchr(sch,'-'))	alpha = -alpha;
	SetScheme(sch);
	alpha /= pow(n*m*l,1./3)/CloudFactor/15;
	if(alpha>1)	alpha = 1;

	// x, y -- матрицы как и z
	bool al=Alpha(true);
	register mreal xx,yy,zz,aa;
	if(both)
	{
		for(i=0;i<n*m*l;i++)
		{
			if(rnd)
			{	xx=x.a[i];	yy=y.a[i];	zz=z.a[i];	aa=a.a[i];	}
			else
			{
				register mreal tx,ty;
				tx=mgl_rnd();	ty=mgl_rnd();	zz=mgl_rnd();
				aa=a.Spline1(tx,ty,zz);	xx=x.Spline1(tx);
				yy=y.Spline1(ty);		zz=z.Spline1(zz);
			}
			AVertex(xx,yy,zz,aa,alpha);
		}
	}
	else	// x, y -- вектора
	{
		for(i=0;i<n;i++)	for(j=0;j<m;j++)	for(k=0;k<l;k++)
		{
			if(rnd)
			{	xx=x.a[i];	yy=y.a[j];	zz=z.a[k];	aa=a.a[i+n*(j+m*k)];	}
			else
			{
				xx=mgl_rnd();	yy=mgl_rnd();	zz=mgl_rnd();
				aa=a.Spline1(xx,yy,zz);	xx=x.Spline1(xx);
				yy=y.Spline1(yy);		zz=z.Spline1(zz);
			}
			AVertex(xx,yy,zz,aa,alpha);
		}
	}
	Alpha(al);
	EndGroup();
}
示例#12
0
// evaluation of embedded (included) expressions
dual mglFormulaC::CalcIn(const dual *a1) const
{
	if(Kod<EQ_LT)
	{
		if(Kod==EQ_RND)	return mgl_rnd();
		else	return (Kod==EQ_A) ? a1[int(Res.real())] : Res;
	}

	dual a = Left->CalcIn(a1);
	if(mgl_isfin(a))
	{
		if(Kod<EQ_SIN)
			return Right?f2[Kod-EQ_LT](a,Right->CalcIn(a1)):NAN;
		else
			return f1[Kod-EQ_SIN](a);
	}
	return NAN;
}
示例#13
0
//-----------------------------------------------------------------------------
long MGL_NO_EXPORT mgl_flame_2d_point(HCDT A, HCDT F, mreal& x, mreal& y, mreal amax)
{
	long i, n=A->GetNy(), m=F->GetNy(), last_func=0, l=F->GetNx();
	l = l>6?6:l;
	mreal r = amax*mgl_rnd(), sum_prob = 0, x1, y1;
	for(i=0;i<n;i++)
	{
		sum_prob += A->v(6,i);
		if(r<sum_prob)	break;
	}
	x1 = A->v(0,i)*x + A->v(1,i)*y + A->v(4,i);
	y1 = A->v(2,i)*x + A->v(3,i)*y + A->v(5,i);
	x = y = 0;
	for(long j=0;j<m;j++)
	{
		int v=int(F->v(0,j,i)+0.5);
		mreal par[5] = {F->v(1,j,i),0,0,0,0};
		for(int k=2;k<l;k++)	par[k-1]=F->v(k,j,i);
		if(v<0 || v>=mglFlameLAST)	{	v=0;	par[0]=1;	}
		ffunc[v](x,y,x1,y1,par);	last_func=v;
	}
	return last_func;
}
示例#14
0
void MGL_NO_EXPORT mgl_blade_var44(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal c1=par[0]*x, c2=mgl_rnd()*hypot(x,y)*par[0];
	xNew += c1*(cos(c2) + sin(c2));	// TODO check use of c2
	yNew += c1*(cos(c2) - sin(c2));
}
示例#15
0
void MGL_NO_EXPORT mgl_blur_var34(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal c1=par[0]*mgl_rnd(), c2=2*M_PI*mgl_rnd();
	xNew += c1*cos(c2);	yNew += c1*sin(c2);
}
示例#16
0
void MGL_NO_EXPORT mgl_gaussian_var35(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal c1=par[0]*(4*mgl_rnd()-2), c2=2*M_PI*mgl_rnd();
	xNew += c1*cos(c2);	yNew += c1*sin(c2);
}
示例#17
0
void MGL_NO_EXPORT mgl_radialBlur_var36(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal r=hypot(x,y), c1=par[1]*M_PI/2, c2=par[0]*(4*mgl_rnd()-2), c3;
	c3 = c2*cos(c1) - 1;	c2 = atan2(y,x) + c2 *sin(c1);
	xNew += r*cos(c2) + c3*x;	yNew += r*sin(c2) + c3*y;
}
示例#18
0
void MGL_NO_EXPORT mgl_arch_var41(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal c1=mgl_rnd()*M_PI*par[0], c2=sin(c1);
	xNew += par[0]*c2;	yNew += par[0]*c2*c2/cos(c1);
}
示例#19
0
void MGL_NO_EXPORT mgl_square_var43(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	xNew += par[0]*(mgl_rnd() - 0.5);
	yNew += par[0]*(mgl_rnd() - 0.5);
}
示例#20
0
void MGL_NO_EXPORT mgl_rays_var43(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal c1 = par[0]*par[0]*tan(mgl_rnd()*M_PI*par[0])/(x*x+y*y);
	xNew += c1*cos(x);	yNew += c1*sin(y);
}
示例#21
0
void MGL_NO_EXPORT mgl_noise_var31(mreal &xNew, mreal &yNew, mreal x, mreal y, const mreal *par)
{
	mreal c1=par[0]*mgl_rnd(), c2=2*M_PI*mgl_rnd();
	xNew += c1*x*cos(c2);	yNew += c1*y*sin(c2);
}