#include "TROOT.h" #include "TStyle.h" #include "TCanvas.h" #include "TView.h" #include "TPolyLine3D.h" #include "TLatex.h" void cir_solid_angle_cal(){ gROOT->SetStyle("Plain"); gStyle->SetTextFont(132); Double_t cwidth = 400; Double_t cheight = 400; TCanvas* c1 = new TCanvas("c1", "c1", cwidth, cheight); c1->SetWindowSize(cwidth + (cwidth - c1->GetWw()), cheight + (cheight - c1->GetWh())); c1->SetTheta(20.); c1->SetPhi(-125.); TView *view = TView::CreateView(1); Double_t view_size = 1.5; view->SetRange(-view_size*1.0,-view_size*1.0,-view_size*1.0, view_size*1.0, view_size*1.0, view_size*1.0); const Int_t nPolyLine3D = 20; TPolyLine3D *guide[nPolyLine3D]; for (Int_t i = 0; iSetNextPoint(-2,-x0,0); guide[0]->SetNextPoint(-2,x0,0); guide[1]->SetNextPoint(-2,0,-x0); guide[1]->SetNextPoint(-2,0,x0); guide[2]->SetNextPoint(-2,0,0); guide[2]->SetNextPoint(-r0,0,0); guide[0]->SetLineStyle(2); guide[1]->SetLineStyle(2); guide[2]->SetLineStyle(2); for (Int_t i=0;i<=n;i++) { Double_t r = 0.6; Double_t theta = -i*theta0/n+pi; guide[4]->SetNextPoint(r*cos(theta),r*sin(theta),0); } for (Int_t i=0;i<=n;i++) { Double_t r = x0; Double_t theta = i*2.*pi/n; guide[5]->SetNextPoint(-2.0,r*cos(theta),r*sin(theta)); } for (Int_t i=0;i<=n;i++) { Double_t r = r0; Double_t theta = i*2.*pi/n; guide[6]->SetNextPoint(r*cos(theta),r*sin(theta),0); guide[7]->SetNextPoint(r*cos(theta),0,r*sin(theta)); } guide[6]->SetLineStyle(2); guide[7]->SetLineStyle(2); Double_t gtheta = -c1->GetTheta()*pi/180.; Double_t gphi = -c1->GetPhi()*pi/180.; for (Int_t i=0;i<=n;i++) { Double_t r = r0; Double_t theta = i*2.*pi/n; Double_t x = r*cos(theta); Double_t z = r*sin(theta); guide[8]->SetNextPoint(x*cos(gphi)+z*sin(gtheta)*sin(gphi), x*sin(gphi)-z*sin(gtheta)*cos(gphi), z*cos(gtheta)); } guide[9]->SetNextPoint(-2.,x0,0); guide[9]->SetNextPoint(0,0,0); guide[9]->SetNextPoint(-2.,0,0); Double_t virlen = 0.2; guide[10]->SetNextPoint(-2.,-virlen,0); guide[10]->SetNextPoint(-2.+virlen,-virlen,0); guide[10]->SetNextPoint(-2.+virlen,0,0); guide[10]->SetNextPoint(-2.+virlen,0,-virlen); guide[10]->SetNextPoint(-2.,0,-virlen); for (Int_t i = 0; iDraw(); } Double_t xx[3],xxt[3]; TLatex Tl; Tl.SetTextSize(0.06); xx[0]=0.1; xx[1]=0.0; xx[2]=-0.25; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"O"); //xx[0]=-2.00; xx[1]=0.05; xx[2]=-0.3; view->WCtoNDC(xx,xxt); //Tl.DrawLatex(xxt[0],xxt[1],"C"); xx[0]=-0.6; xx[1]=0.25; xx[2]=0.00; view->WCtoNDC(xx,xxt); Tl.DrawLatex(xxt[0],xxt[1],"#it{#alpha}"); xx[0]=-0.6; xx[1]=-0.1; xx[2]=0.00; view->WCtoNDC(xx,xxt); Tl.SetTextAngle(25); Tl.DrawLatex(xxt[0],xxt[1],"cos#it{#alpha}"); }