Pyxplot |
Examples - Lenses |
Using the arc command to draw an optics diagram In this example, we make a subroutine to draw labelled diagrams of converging lenses forming real images. Script
# Define subroutine for drawing lens diagrams
subroutine lensDraw(x0,y0,u,h,f)
{
# Use the thin-lens equation to find v and H
v = 1/(1/f - 1/u)
H = h * v / u
# Draw lens
lc = 5.5*unit(cm) # Radius of curvature of lens
lt = 0.5*unit(cm) # Thickness of lens
la = acos((lc-lt/2)/lc) # Angular size of lens from center of curvature
lh = lc*sin(la) # Physical height of lens on paper
arc at x0-(lc-lt/2),y0 radius lc from 90*unit(deg)-la to 90*unit(deg)+la
arc at x0+(lc-lt/2),y0 radius lc from 270*unit(deg)-la to 270*unit(deg)+la
set texthalign right ; set textvalign top
point at x0-f,y0 label "$f$"
set texthalign left ; set textvalign bottom
point at x0+f,y0 label "$f$"
# Draw object and image
arrow from x0-u,y0 to x0-u,y0+h with lw 2
arrow from x0+v,y0 to x0+v,y0-H with lw 2
text "$h$" at x0-u,y0+h/2 hal l val c gap unit(mm)
text "$H$" at x0+v,y0-H/2 hal l val c gap unit(mm)
# Draw construction lines
line from x0-u,y0 to x0+v,y0 with lt 2 # Optic axis
line from x0-u,y0+h to x0+v,y0-H # Undeflected ray through origin
line from x0-u,y0+h to x0,y0+h
line from x0,y0+h to x0+v,y0-H
line from x0+v,y0-H to x0,y0-H
line from x0,y0-H to x0-u,y0+h
# Label distances u and v
ylabel = y0-lh-2*unit(mm)
arrow from x0-u,ylabel to x0,ylabel with twoway lt 2
arrow from x0+v,ylabel to x0,ylabel with twoway lt 2
text "$u$" at x0-u/2,ylabel hal c val t gap unit(mm)
text "$v$" at x0+v/2,ylabel hal c val t gap unit(mm)
}
# Display diagram of lens
set unit angle nodimensionless
set multiplot ; set nodisplay
call lensDraw(0*unit(cm),0*unit(cm), 5*unit(cm),1.5*unit(cm),2*unit(cm))
call lensDraw(0*unit(cm),5*unit(cm), 4*unit(cm),1.5*unit(cm),2*unit(cm))
set display ; refresh
|


