| <svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink"> |
| <defs> |
| <!-- a => b => a --> |
| <pattern id="a" x="0" y="0" width=".25" height=".25"> |
| <rect fill="lime" width="100%" height="100%"/> |
| <rect fill="url(#b)" width="100%" height="100%"/> |
| </pattern> |
| <pattern id="b" xlink:href="#a"/> |
| |
| <!-- l => m => n => l --> |
| <pattern id="l" x="0" y="0" width=".25" height=".25"> |
| <rect fill="lime" width="100%" height="100%"/> |
| <rect fill="url(#m)" width="100%" height="100%"/> |
| </pattern> |
| <pattern id="m" xlink:href="#n"/> |
| <pattern id="n" xlink:href="#l"/> |
| |
| <!-- p => q --> |
| <pattern id="p" x="0" y="0" width=".25" height=".25"> |
| <rect fill="lime" width="100%" height="100%"/> |
| <rect fill="url(#q)" width="100%" height="100%"/> |
| </pattern> |
| <pattern id="q"/> |
| |
| <!-- t => s --> |
| <pattern id="s" x="0" y="0" width=".25" height=".25"> |
| <rect fill="lime" width="100%" height="100%"/> |
| <rect id="r" width="100%" height="100%"/> |
| </pattern> |
| <pattern id="t" xlink:href="#s"/> |
| </defs> |
| <g fill="none" stroke="black" stroke-width="1"> |
| <circle cx="75" cy="75" fill="url(#a)" r="50"/> |
| <circle cx="200" cy="75" fill="url(#b)" r="50"/> |
| |
| <circle cx="75" cy="200" fill="url(#l)" r="50"/> |
| <circle cx="200" cy="200" fill="url(#m)" r="50"/> |
| <circle cx="325" cy="200" fill="url(#n)" r="50"/> |
| |
| <circle cx="75" cy="325" fill="url(#p)" r="50"/> |
| <circle cx="200" cy="325" fill="url(#q)" r="50"/> |
| |
| <circle cx="75" cy="450" fill="url(#s)" r="50"/> |
| <circle cx="200" cy="450" fill="url(#t)" r="50"/> |
| </g> |
| <script> |
| // Add q => p to get p => q => p |
| document.getElementById("q").setAttributeNS("http://www.w3.org/1999/xlink", "href", "#p"); |
| |
| // Add s => t to get s => t => s |
| document.getElementById("r").setAttribute("fill", "url(#t)"); |
| |
| // Force layout |
| document.documentElement.removeAttribute("class"); |
| </script> |
| </svg> |