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); }
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 } }
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(); } }
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 }
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); }
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)); }
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); }
//----------------------------------------------------------------------------- // // 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; }
//----------------------------------------------------------------------------- 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; }
//----------------------------------------------------------------------------- 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 }
//----------------------------------------------------------------------------- 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(); }
// 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; }
//----------------------------------------------------------------------------- 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; }
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)); }
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); }
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); }
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; }
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); }
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); }
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); }
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); }