Diese Datei stammt aus Wikimedia Commons und kann von anderen Projekten verwendet werden. Die Beschreibung von deren Dateibeschreibungsseite wird unten angezeigt.
# -*- coding: utf-8 -*-# This python3 code uses `svgwrite` to create an `svg` (Scalable# Vector Graphics) file illustrating a sphere with radius and diameter# depicted. The code was adapted from code available at# https://commons.wikimedia.org/wiki/File:Poincare-sphere_stokes.svg# to illustrate a Poincaré sphere, a geometric model important to# describe polarisations of electromagnetic waves.# This code is a derivative of Poincare-sphere stokes.svg ([[:File:Poincare-sphere_stokes.svg]]) by Geek3 (https://commons.wikimedia.org/wiki/User:Geek3) used under the CC BY 3.0 license ([[:File:Poincare-sphere_stokes.svg]]). This code is licensed under CC BY-SA 4.0 (https://creativecommons.org/licenses/by-sa/4.0/) by Steven Baltakatei Sandoval.try:importsvgwriteassvgexceptImportError:print('You need to install svgwrite: https://pypi.org/project/svgwrite/')# documentation at https://svgwrite.readthedocs.io/en/master/exit(1)frommathimport*# define function to convert spherical coordinates (theta,phi,radius) into cartesian coordinates (x,y,z)defto_xyz(theta,phi,r=1):returnr*sin(theta)*cos(phi),r*sin(theta)*sin(phi),r*cos(theta)# define function to convert cartesian coordinates (x,y,z) into spherical coordinates (theta,phi,radius)defto_theta_phi_r(x,y,z):returnatan2(z,sqrt(x**2+y**2)),atan2(x,y),sqrt(x**2+y**2+z**2)# define function to rotate (?) given cartesian coordinates (x,y,z) by angle (a) in radians.defrotx(x,y,z,a):y,z=cos(a)*y+sin(a)*z,cos(a)*z-sin(a)*yreturnx,y,zdefellipse_path(theta,phi,tilt,flip=False):t,p,r2=to_theta_phi_r(*rotx(*(to_xyz(theta,phi,1)+(tilt,))))a=abs(r)b=abs(r*sin(t))# Construct Path Command string. Commands include `M` ('moveto') and `A` ('elliptical-arc'.# reference: https://svgwrite.readthedocs.io/en/master/classes/path.htmlreturn'M %f,%f A %f,%f%f%i,%i%f,%f'%(-r*cos(p),-r*sin(p),a,b,p*180/pi,0,{True:1,False:0}[flip],r*cos(p),r*sin(p))# documentsize=600,600#600px = 450ptdoc=svg.Drawing('sphere_(param_r,d).svg',profile='full',size=size)doc.set_desc('sphere_(param_r,d).svg','''Drawing of a sphere with radius r and diameter d.rights: GNU Free Documentation license, Creative Commons Attribution ShareAlike 4.0 license''')# settingsdash='8,6'col='black'r=220tilt=radians(-70)phi=radians(-25)cp,sp=cos(phi),sin(phi)# backgrounddoc.add(doc.rect(id='background',profile='full',insert=(0,0),size=size,fill='white',stroke='none'))# arrow markersarrow_e='M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z'arrow3=doc.marker(id='arrow3',orient='auto',overflow='visible')arrow3.add(doc.path(d=arrow_e,fill=col,stroke='none',transform='scale(0.8) rotate(180)'))doc.defs.add(arrow3)arrow4=doc.marker(id='arrow4',orient='auto',overflow='visible')arrow4.add(doc.path(d=arrow_e,fill=col,stroke='none',transform='scale(0.8)'))doc.defs.add(arrow4)# make a group for the sphere and define SVG Presentation Attributes (See 'https://svgwrite.readthedocs.io/en/master/attributes/presentation.html')sphere=doc.g(transform='translate(300, 300)',fill='none',stroke=col,stroke_width='2')#sphere['font-family'] = 'DejaVu Sans'sphere['font-family']='Linux Libertine O'sphere['font-size']='80px'sphere['font-style']='italic'doc.add(sphere)# back ellipsessphere.add(doc.path(d=ellipse_path(0,0,tilt),stroke_dasharray=dash,stroke=col))# horizontal backsphere.add(doc.path(d=ellipse_path(pi/2,phi,tilt,True),stroke_dasharray=dash,stroke=col))# vertical back 1sphere.add(doc.path(d=ellipse_path(pi/2,phi+pi/2,tilt),stroke_dasharray=dash,stroke=col))# vertical back 2# draw center pointsphere.add(doc.circle(center=(0,0),r=5,fill=col,stroke='none'))# draw radius lineradius_angle=radians(-227)radius_line=doc.line(start=(0,0),end=(0.99*r*cos(radius_angle),0.99*r*sin(radius_angle)),stroke=col)radius_line['marker-end']=arrow3.get_funciri()sphere.add(radius_line)# draw radius label, rradius_label_pos_x=str(-0.25*r)radius_label_pos_y=str(0.22*r)radius_label_transform_str="translate("+radius_label_pos_x+", "+radius_label_pos_y+")"sphere.add(doc.text('r',text_anchor='middle',transform=radius_label_transform_str,stroke='none',fill=col))# sphere surfacegrad1=doc.defs.add(doc.radialGradient(id='grad1',center=(0.375,0.15),r=0.75,gradientUnits='objectBoundingBox'))grad1.add_stop_color(offset=0,color='#ffffff',opacity=0.3)grad1.add_stop_color(offset=1,color='#dddddd',opacity=0.3)sphere.add(doc.circle(center=(0,0),r=str(r),fill='url(#grad1)',stroke='none'))grad2=doc.defs.add(doc.radialGradient(id='grad2',center=(0.45,0.45),r=0.575,gradientUnits='objectBoundingBox'))grad2.add_stop_color(offset=0.6,color='#cccccc',opacity=0)grad2.add_stop_color(offset=0.8,color='#cccccc',opacity=0.2)grad2.add_stop_color(offset=1,color='#333333',opacity=0.2)sphere.add(doc.circle(center=(0,0),r=str(r),fill='url(#grad2)',stroke='none'))# front ellipsessphere.add(doc.path(d=ellipse_path(0,0,tilt,True)))#horizontal frontsphere.add(doc.path(d=ellipse_path(pi/2,phi,tilt)))#vertical front 1sphere.add(doc.path(d=ellipse_path(pi/2,phi+pi/2,tilt,True)))#vertical front 2# circle edgesphere.add(doc.circle(center=(0,0),r=str(r)))# diameter linediam_line=doc.line(start=(-0.995*r,-r*1.05),end=(0.995*r,-r*1.05),stroke=col)diam_line['marker-start']=arrow4.get_funciri()diam_line['marker-end']=arrow3.get_funciri()sphere.add(diam_line)# left diameter line limitdiam_line_llim=doc.line(start=(-1.005*r,-0.15*r),end=(-1.005*r,-1.20*r),stroke=col)sphere.add(diam_line_llim)# right diameter line limitdiam_line_rlim=doc.line(start=(1.005*r,-0.15*r),end=(1.005*r,-1.20*r),stroke=col)sphere.add(diam_line_rlim)# draw diameter label, ddiameter_label_pos_x=str(-0.00*r)diameter_label_pos_y=str(-1.075*r)diameter_label_transform_str="translate("+diameter_label_pos_x+", "+diameter_label_pos_y+")"sphere.add(doc.text('d',text_anchor='middle',transform=diameter_label_transform_str,stroke='none',fill=col))doc.save()
Lizenz
Ich, der Urheber dieses Werkes, veröffentliche es unter der folgenden Lizenz:
verbreitet werden – vervielfältigt, verbreitet und öffentlich zugänglich gemacht werden
neu zusammengestellt werden – abgewandelt und bearbeitet werden
Zu den folgenden Bedingungen:
Namensnennung – Du musst angemessene Urheber- und Rechteangaben machen, einen Link zur Lizenz beifügen und angeben, ob Änderungen vorgenommen wurden. Diese Angaben dürfen in jeder angemessenen Art und Weise gemacht werden, allerdings nicht so, dass der Eindruck entsteht, der Lizenzgeber unterstütze gerade dich oder deine Nutzung besonders.
Diese Datei enthält weitere Informationen, die in der Regel von der Digitalkamera oder dem verwendeten Scanner stammen. Durch nachträgliche Bearbeitung der Originaldatei können einige Details verändert worden sein.