# Optics percentage anchors Use integer percentages from 0 through 100, for example `(L.surface-25)`. Arc percentages interpolate the arc angle (and hence arc length), not height. Straight edges interpolate distance. All directions are local to the node; rotation and scaling transform the attachment points with the object. | Shape | Family | Direction from 0 to 100 | |---|---|---| | Both mirrors | surface, front, back | Bottom to top; surface is the reflecting face | | Both lenses | surface, front, back | Bottom to top; surface equals front | | Slab | surface, front, back | Bottom to top; surface equals front | | Mirrors, lenses, slab | top | Right to left | | Mirrors, lenses, slab | bottom | Left to right | | Prism | base | Base-left to base-right | | Prism | left, entry, surface | Apex to base-left | | Prism | right, exit | Base-right to apex | Prism entry and exit are geometric aliases, not automatic ray tracing. Existing prism directions are preserved. Bare `.0` through `.100` still select the primary surface on every optical shape. Prefer explicit families to distinguish percentage positions from TikZ's numeric angle anchors. Mirror and lens caps span their finite edge thickness. Named anchors such as `top`, `bottom`, and `front-mid` remain available and coincide with the corresponding 50-percent point. ```tex \node[convex-lens] (L) {}; \draw[->] (-3,0) -- (L.surface-50); \draw (L.top-25) -- ++(0,0.5); \node[prism] (P) at (5,0) {}; \draw[->] (P.entry-35) -- (P.exit-65); ``` Use `show anchors` with `physics debug/anchor families={surface,top,bottom}` and `physics debug/anchor samples={0,25,50,75,100}` to inspect selected families. The generated reference cards also list every available family. See `examples/optics-percentage-anchors.tex` for all six shapes. ## Plane mirrors and asymmetric lenses | Style | Default faces | Default front/back radii | |---|---|---| | `plane-mirror` (also `plane mirror`) | Both flat; front is reflecting | Not used | | `plano-convex-lens` (also `plano-convex`) | Flat front, convex back | Unused / 5 cm | | `plano-concave-lens` (also `plano-concave`) | Flat front, concave back | Unused / 5 cm | | `positive-meniscus-lens` | Convex front, concave back; thicker centre | 4 cm / 6 cm | | `negative-meniscus-lens` | Convex front, concave back; thicker rim | 6 cm / 4 cm | All five provide `surface`, `front`, and `back` percentages from bottom to top; `surface` and bare numeric anchors select the front face. `top` runs right to left and `bottom` left to right. Flat faces interpolate height; circular faces interpolate angle. Named `front-mid`, `back-mid`, `front-top`, `front-bottom`, `back-top`, `back-bottom`, `surface-mid`, `surface-top`, `surface-bottom`, `vertex`, `top`, and `bottom` are available. The node centre is halfway between the on-axis face vertices. Plane mirrors accept `mirror height` (default 3 cm) and `mirror thickness` (default 0.25 cm). The other new variants accept `lens height` (3 cm), `lens thickness` (0.2 cm), `lens front radius`, and `lens back radius`. `lens radius` sets both radii. These new lens keys apply to the asymmetric variants; existing biconvex/biconcave shapes keep their existing keys. Bare length numbers are centimetres. Height and thickness must be positive; each curved face radius must exceed half the height. Flat faces ignore radius. Thickness means the **minimum material thickness**, whether at the centre or the rim, preventing crossing faces. Meniscus names identify the default geometry. Changing radii can change which region is thicker; these nodes do not calculate focal length or rays. Use `xscale=-1` to reverse any variant and `rotate` to orient it. Anchors remain attached to their original faces after transformation. `biconvex-lens` and `biconcave-lens` are aliases of the existing lens styles. ```tex \node[plane-mirror,mirror height=4,mirror thickness=.15] (M) {}; \node[plano-concave-lens,lens height=3,lens radius=5, lens thickness=.25,xscale=-1] (L) at (4,0) {}; \draw[->] (L.surface-50) -- (M.surface-50); ``` Each canonical style has a collision-safe `physics...` form, for example `physicsplanemirror` and `physicsplanoconcavelens`, and its own `every