#include "TROOT.h" #include "TStyle.h" #include "TCanvas.h" #include "TView.h" #include "TPolyLine3D.h" #include "TLatex.h" void DrawFrame3D(){ Int_t k2[3][3] = { {1,0,0}, {0,1,0}, {0,0,1}}; Double_t xyzsize[3][3] = { {1.1,0,0}, {0,1.2,0}, {0,0,1.2}}; TPolyLine3D *l2[3]; for (Int_t j=0;j<3;j++){ l2[j] = new TPolyLine3D(); l2[j]->SetNextPoint(0,0,0); l2[j]->SetNextPoint(xyzsize[j][0],xyzsize[j][1],xyzsize[j][2]); l2[j]->Draw(); } Double_t arrowsize = 0.1; TPolyLine3D *arrow[3]; for (Int_t j=0;j<3;j++){ arrow[j] = new TPolyLine3D(); arrow[j]->SetNextPoint(xyzsize[j][0]+arrowsize*k2[j][0], xyzsize[j][1]+arrowsize*k2[j][1], xyzsize[j][2]+arrowsize*k2[j][2]); arrow[j]->SetNextPoint(xyzsize[j][0]+0.3*k2[j][2]*arrowsize, xyzsize[j][1]+0.3*k2[j][0]*arrowsize, xyzsize[j][2]+0.3*k2[j][1]*arrowsize); arrow[j]->SetNextPoint(xyzsize[j][0]-0.3*k2[j][2]*arrowsize, xyzsize[j][1]-0.3*k2[j][0]*arrowsize, xyzsize[j][2]-0.3*k2[j][1]*arrowsize); arrow[j]->SetNextPoint(xyzsize[j][0]+arrowsize*k2[j][0], xyzsize[j][1]+arrowsize*k2[j][1], xyzsize[j][2]+arrowsize*k2[j][2]); arrow[j]->Draw(); } } void cir_solid_angle_dxdy(){ gROOT->SetStyle("Plain"); gStyle->SetTextFont(132); TCanvas *c1 = new TCanvas("c1","c1",400,400); // c1->SetTheta(20.); c1->SetTheta(22.); c1->SetPhi(-134.); DrawFrame3D(); TView *view = TView::CreateView(1); Double_t view_size = 0.65; view->SetRange(-view_size*1.0,-view_size*1.0,-view_size*0.7, view_size*1.0, view_size*1.0, view_size*1.3); const Int_t nPolyLine3D = 20; TPolyLine3D *guide[nPolyLine3D]; for (Int_t i = 0; iSetNextPoint(r*cos(theta)+1, r*sin(theta)*x1/sqrt(x1*x1+y1*y1), r*sin(theta)*y1/sqrt(x1*x1+y1*y1)); } std::cout << r1 << std::endl; std::cout << 1./r1 << std::endl; std::cout << acos(1./r1) << std::endl; std::cout << cos(acos(1./r1)) << std::endl; for (Int_t i=0;i<=2*n;i++) { Double_t theta = i*(2*pi)/(2*n); guide[1]->SetNextPoint(0,x0*cos(theta),x0*sin(theta)); } guide[2]->SetNextPoint(1,0,0); guide[2]->SetNextPoint(0,x1,y1); guide[2]->SetNextPoint(0,0,0); guide[2]->SetLineStyle(2); guide[3]->SetNextPoint(0,x1-0.07,y1-0.07); guide[3]->SetNextPoint(0,x1-0.07,y1+0.07); guide[3]->SetNextPoint(0,x1+0.07,y1+0.07); guide[3]->SetNextPoint(0,x1+0.07,y1-0.07); guide[3]->SetNextPoint(0,x1-0.07,y1-0.07); for (Int_t i=0;i<=n;i++) { Double_t r = 0.3; Double_t theta = -i*theta0/n+pi; guide[4]->SetNextPoint(1.0+r*cos(theta),r*sin(theta),0); //guide[5]->SetNextPoint(1.0+r*cos(theta),0,r*sin(theta)); } for (Int_t i=0;i<=n;i++) { Double_t r = 0.2; Double_t theta = i*atan(y1/x1)/n; guide[5]->SetNextPoint(0,r*cos(theta),r*sin(theta)); //guide[5]->SetNextPoint(1.0+r*cos(theta),0,r*sin(theta)); } guide[6]->SetNextPoint(1,0,0); guide[6]->SetNextPoint(0,x0,0); guide[6]->SetLineStyle(2); for (Int_t i = 0; iDraw(); } Double_t xx[3],xxt[3]; TLatex Tl; Tl.SetTextSize(0.07); xx[0]=0.5; xx[1]=x1/2; xx[2]=y1/2+0.05; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{r}"); xx[0]=0.00; xx[1]=1.2; xx[2]=0.10; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{x}"); xx[0]=0.15; xx[1]=0.00; xx[2]=1.22; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{y}"); xx[0]=1.04; xx[1]=0.0; xx[2]=-0.10; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{c}"); xx[0]=1.18; xx[1]=0.0; xx[2]=0.10; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{z}"); // xx[0]=1.04; xx[1]=0.0; xx[2]=0.07; view->WCtoNDC(xx,xxt); // Tl.DrawLatex(xxt[0],xxt[1],"P"); xx[0]=0.74; xx[1]=0.21; xx[2]=0.16; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{#theta}"); xx[0]=0.0; xx[1]=0.18; xx[2]=0.14; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{#varphi}"); xx[0]=0.00; xx[1]=x1+0.1; xx[2]=y1-0.05; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{#Delta}#it{y}"); xx[0]=0.00; xx[1]=x1-0.05; xx[2]=y1+0.1; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{#Delta}#it{x}"); xx[0]=0.00; xx[1]=x0+0.03; xx[2]=-0.13; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{a}"); xx[0]=0.72; xx[1]=0.15; xx[2]=0.0; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{#alpha}"); }