Commit d6c861fa50bd953c2987a106ce29f49f9e5c5e6c
1 parent
a003e49d
Added tapered bullet diagram
Showing
3 changed files
with
527 additions
and
8 deletions
07-tapered_bullet/bullet.png
0 → 100644
70.8 KB
07-tapered_bullet/bullet.svg
0 → 100644
| 1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
| 2 | +<!-- Created with Inkscape (http://www.inkscape.org/) --> | ||
| 3 | + | ||
| 4 | +<svg | ||
| 5 | + xmlns:dc="http://purl.org/dc/elements/1.1/" | ||
| 6 | + xmlns:cc="http://creativecommons.org/ns#" | ||
| 7 | + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | ||
| 8 | + xmlns:svg="http://www.w3.org/2000/svg" | ||
| 9 | + xmlns="http://www.w3.org/2000/svg" | ||
| 10 | + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||
| 11 | + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||
| 12 | + width="210mm" | ||
| 13 | + height="297mm" | ||
| 14 | + viewBox="0 0 210 297" | ||
| 15 | + version="1.1" | ||
| 16 | + id="svg8" | ||
| 17 | + sodipodi:docname="bullet.svg" | ||
| 18 | + inkscape:version="0.92.4 (5da689c313, 2019-01-14)" | ||
| 19 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 20 | + inkscape:export-xdpi="644" | ||
| 21 | + inkscape:export-ydpi="644"> | ||
| 22 | + <defs | ||
| 23 | + id="defs2"> | ||
| 24 | + <marker | ||
| 25 | + inkscape:stockid="Arrow1Mend" | ||
| 26 | + orient="auto" | ||
| 27 | + refY="0.0" | ||
| 28 | + refX="0.0" | ||
| 29 | + id="marker13182" | ||
| 30 | + style="overflow:visible;" | ||
| 31 | + inkscape:isstock="true"> | ||
| 32 | + <path | ||
| 33 | + id="path13180" | ||
| 34 | + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 35 | + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" | ||
| 36 | + transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 37 | + </marker> | ||
| 38 | + <marker | ||
| 39 | + inkscape:isstock="true" | ||
| 40 | + style="overflow:visible;" | ||
| 41 | + id="marker11017" | ||
| 42 | + refX="0.0" | ||
| 43 | + refY="0.0" | ||
| 44 | + orient="auto" | ||
| 45 | + inkscape:stockid="Arrow1Mend" | ||
| 46 | + inkscape:collect="always"> | ||
| 47 | + <path | ||
| 48 | + transform="scale(0.4) rotate(180) translate(10,0)" | ||
| 49 | + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" | ||
| 50 | + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 51 | + id="path11015" /> | ||
| 52 | + </marker> | ||
| 53 | + <marker | ||
| 54 | + inkscape:stockid="Arrow1Mend" | ||
| 55 | + orient="auto" | ||
| 56 | + refY="0.0" | ||
| 57 | + refX="0.0" | ||
| 58 | + id="Arrow1Mend" | ||
| 59 | + style="overflow:visible;" | ||
| 60 | + inkscape:isstock="true" | ||
| 61 | + inkscape:collect="always"> | ||
| 62 | + <path | ||
| 63 | + id="path836" | ||
| 64 | + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 65 | + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" | ||
| 66 | + transform="scale(0.4) rotate(180) translate(10,0)" /> | ||
| 67 | + </marker> | ||
| 68 | + <marker | ||
| 69 | + inkscape:stockid="Arrow1Mstart" | ||
| 70 | + orient="auto" | ||
| 71 | + refY="0.0" | ||
| 72 | + refX="0.0" | ||
| 73 | + id="marker10831" | ||
| 74 | + style="overflow:visible" | ||
| 75 | + inkscape:isstock="true"> | ||
| 76 | + <path | ||
| 77 | + id="path10829" | ||
| 78 | + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 79 | + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" | ||
| 80 | + transform="scale(0.4) translate(10,0)" /> | ||
| 81 | + </marker> | ||
| 82 | + <marker | ||
| 83 | + inkscape:isstock="true" | ||
| 84 | + style="overflow:visible" | ||
| 85 | + id="marker5567" | ||
| 86 | + refX="0.0" | ||
| 87 | + refY="0.0" | ||
| 88 | + orient="auto" | ||
| 89 | + inkscape:stockid="Arrow1Mstart" | ||
| 90 | + inkscape:collect="always"> | ||
| 91 | + <path | ||
| 92 | + transform="scale(0.4) translate(10,0)" | ||
| 93 | + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" | ||
| 94 | + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 95 | + id="path5565" /> | ||
| 96 | + </marker> | ||
| 97 | + <marker | ||
| 98 | + inkscape:stockid="Arrow1Mstart" | ||
| 99 | + orient="auto" | ||
| 100 | + refY="0.0" | ||
| 101 | + refX="0.0" | ||
| 102 | + id="marker5491" | ||
| 103 | + style="overflow:visible" | ||
| 104 | + inkscape:isstock="true" | ||
| 105 | + inkscape:collect="always"> | ||
| 106 | + <path | ||
| 107 | + id="path5489" | ||
| 108 | + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 109 | + style="fill-rule:evenodd;stroke:#ff0000;stroke-width:1pt;stroke-opacity:1;fill:#ff0000;fill-opacity:1" | ||
| 110 | + transform="scale(0.4) translate(10,0)" /> | ||
| 111 | + </marker> | ||
| 112 | + <marker | ||
| 113 | + inkscape:stockid="Arrow1Mstart" | ||
| 114 | + orient="auto" | ||
| 115 | + refY="0.0" | ||
| 116 | + refX="0.0" | ||
| 117 | + id="Arrow1Mstart" | ||
| 118 | + style="overflow:visible" | ||
| 119 | + inkscape:isstock="true"> | ||
| 120 | + <path | ||
| 121 | + id="path833" | ||
| 122 | + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 123 | + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" | ||
| 124 | + transform="scale(0.4) translate(10,0)" /> | ||
| 125 | + </marker> | ||
| 126 | + <marker | ||
| 127 | + inkscape:stockid="Arrow1Lstart" | ||
| 128 | + orient="auto" | ||
| 129 | + refY="0.0" | ||
| 130 | + refX="0.0" | ||
| 131 | + id="Arrow1Lstart" | ||
| 132 | + style="overflow:visible" | ||
| 133 | + inkscape:isstock="true"> | ||
| 134 | + <path | ||
| 135 | + id="path827" | ||
| 136 | + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 137 | + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" | ||
| 138 | + transform="scale(0.8) translate(12.5,0)" /> | ||
| 139 | + </marker> | ||
| 140 | + <marker | ||
| 141 | + inkscape:stockid="Arrow1Lend" | ||
| 142 | + orient="auto" | ||
| 143 | + refY="0.0" | ||
| 144 | + refX="0.0" | ||
| 145 | + id="Arrow1Lend" | ||
| 146 | + style="overflow:visible;" | ||
| 147 | + inkscape:isstock="true"> | ||
| 148 | + <path | ||
| 149 | + id="path830" | ||
| 150 | + d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z " | ||
| 151 | + style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1;fill:#000000;fill-opacity:1" | ||
| 152 | + transform="scale(0.8) rotate(180) translate(12.5,0)" /> | ||
| 153 | + </marker> | ||
| 154 | + <marker | ||
| 155 | + inkscape:stockid="Arrow1Lstart" | ||
| 156 | + orient="auto" | ||
| 157 | + refY="0" | ||
| 158 | + refX="0" | ||
| 159 | + id="Arrow1Lstart-7" | ||
| 160 | + style="overflow:visible" | ||
| 161 | + inkscape:isstock="true"> | ||
| 162 | + <path | ||
| 163 | + inkscape:connector-curvature="0" | ||
| 164 | + id="path827-0" | ||
| 165 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
| 166 | + style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1" | ||
| 167 | + transform="matrix(0.8,0,0,0.8,10,0)" /> | ||
| 168 | + </marker> | ||
| 169 | + <marker | ||
| 170 | + inkscape:stockid="Arrow1Mstart" | ||
| 171 | + orient="auto" | ||
| 172 | + refY="0" | ||
| 173 | + refX="0" | ||
| 174 | + id="marker5491-1" | ||
| 175 | + style="overflow:visible" | ||
| 176 | + inkscape:isstock="true" | ||
| 177 | + inkscape:collect="always"> | ||
| 178 | + <path | ||
| 179 | + inkscape:connector-curvature="0" | ||
| 180 | + id="path5489-9" | ||
| 181 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
| 182 | + style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1.00000003pt;stroke-opacity:1" | ||
| 183 | + transform="matrix(0.4,0,0,0.4,4,0)" /> | ||
| 184 | + </marker> | ||
| 185 | + <marker | ||
| 186 | + inkscape:stockid="Arrow1Mstart" | ||
| 187 | + orient="auto" | ||
| 188 | + refY="0" | ||
| 189 | + refX="0" | ||
| 190 | + id="marker5491-1-7" | ||
| 191 | + style="overflow:visible" | ||
| 192 | + inkscape:isstock="true" | ||
| 193 | + inkscape:collect="always"> | ||
| 194 | + <path | ||
| 195 | + inkscape:connector-curvature="0" | ||
| 196 | + id="path5489-9-8" | ||
| 197 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
| 198 | + style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1.00000003pt;stroke-opacity:1" | ||
| 199 | + transform="matrix(0.4,0,0,0.4,4,0)" /> | ||
| 200 | + </marker> | ||
| 201 | + <marker | ||
| 202 | + inkscape:stockid="Arrow1Mstart" | ||
| 203 | + orient="auto" | ||
| 204 | + refY="0" | ||
| 205 | + refX="0" | ||
| 206 | + id="marker5491-5" | ||
| 207 | + style="overflow:visible" | ||
| 208 | + inkscape:isstock="true" | ||
| 209 | + inkscape:collect="always"> | ||
| 210 | + <path | ||
| 211 | + inkscape:connector-curvature="0" | ||
| 212 | + id="path5489-3" | ||
| 213 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
| 214 | + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" | ||
| 215 | + transform="matrix(0.4,0,0,0.4,4,0)" /> | ||
| 216 | + </marker> | ||
| 217 | + <marker | ||
| 218 | + inkscape:stockid="Arrow1Mstart" | ||
| 219 | + orient="auto" | ||
| 220 | + refY="0" | ||
| 221 | + refX="0" | ||
| 222 | + id="marker5491-1-9" | ||
| 223 | + style="overflow:visible" | ||
| 224 | + inkscape:isstock="true" | ||
| 225 | + inkscape:collect="always"> | ||
| 226 | + <path | ||
| 227 | + inkscape:connector-curvature="0" | ||
| 228 | + id="path5489-9-0" | ||
| 229 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
| 230 | + style="fill:#0000ff;fill-opacity:1;fill-rule:evenodd;stroke:#0000ff;stroke-width:1.00000003pt;stroke-opacity:1" | ||
| 231 | + transform="matrix(0.4,0,0,0.4,4,0)" /> | ||
| 232 | + </marker> | ||
| 233 | + <marker | ||
| 234 | + inkscape:stockid="Arrow1Mstart" | ||
| 235 | + orient="auto" | ||
| 236 | + refY="0" | ||
| 237 | + refX="0" | ||
| 238 | + id="marker5491-1-1" | ||
| 239 | + style="overflow:visible" | ||
| 240 | + inkscape:isstock="true" | ||
| 241 | + inkscape:collect="always"> | ||
| 242 | + <path | ||
| 243 | + inkscape:connector-curvature="0" | ||
| 244 | + id="path5489-9-9" | ||
| 245 | + d="M 0,0 5,-5 -12.5,0 5,5 Z" | ||
| 246 | + style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:1.00000003pt;stroke-opacity:1" | ||
| 247 | + transform="matrix(0.4,0,0,0.4,4,0)" /> | ||
| 248 | + </marker> | ||
| 249 | + </defs> | ||
| 250 | + <sodipodi:namedview | ||
| 251 | + id="base" | ||
| 252 | + pagecolor="#ffffff" | ||
| 253 | + bordercolor="#666666" | ||
| 254 | + borderopacity="1.0" | ||
| 255 | + inkscape:pageopacity="1" | ||
| 256 | + inkscape:pageshadow="2" | ||
| 257 | + inkscape:zoom="18.472801" | ||
| 258 | + inkscape:cx="246.9538" | ||
| 259 | + inkscape:cy="523.67682" | ||
| 260 | + inkscape:document-units="mm" | ||
| 261 | + inkscape:current-layer="g12311" | ||
| 262 | + showgrid="true" | ||
| 263 | + inkscape:window-width="1920" | ||
| 264 | + inkscape:window-height="1007" | ||
| 265 | + inkscape:window-x="0" | ||
| 266 | + inkscape:window-y="0" | ||
| 267 | + inkscape:window-maximized="1"> | ||
| 268 | + <inkscape:grid | ||
| 269 | + type="xygrid" | ||
| 270 | + id="grid815" /> | ||
| 271 | + </sodipodi:namedview> | ||
| 272 | + <metadata | ||
| 273 | + id="metadata5"> | ||
| 274 | + <rdf:RDF> | ||
| 275 | + <cc:Work | ||
| 276 | + rdf:about=""> | ||
| 277 | + <dc:format>image/svg+xml</dc:format> | ||
| 278 | + <dc:type | ||
| 279 | + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | ||
| 280 | + <dc:title /> | ||
| 281 | + </cc:Work> | ||
| 282 | + </rdf:RDF> | ||
| 283 | + </metadata> | ||
| 284 | + <g | ||
| 285 | + inkscape:label="Layer 1" | ||
| 286 | + inkscape:groupmode="layer" | ||
| 287 | + id="layer1"> | ||
| 288 | + <path | ||
| 289 | + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Mend)" | ||
| 290 | + d="M 41.010417,167.35417 V 142.21875" | ||
| 291 | + id="path823" | ||
| 292 | + inkscape:connector-curvature="0" | ||
| 293 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 294 | + inkscape:export-xdpi="644.96997" | ||
| 295 | + inkscape:export-ydpi="644.96997" /> | ||
| 296 | + <path | ||
| 297 | + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker11017)" | ||
| 298 | + d="M 41.010417,167.35417 H 74.083334" | ||
| 299 | + id="path825" | ||
| 300 | + inkscape:connector-curvature="0" | ||
| 301 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 302 | + inkscape:export-xdpi="644.96997" | ||
| 303 | + inkscape:export-ydpi="644.96997" /> | ||
| 304 | + <g | ||
| 305 | + id="g12311" | ||
| 306 | + transform="rotate(30,62.177082,154.125)" | ||
| 307 | + style="" | ||
| 308 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 309 | + inkscape:export-xdpi="644.96997" | ||
| 310 | + inkscape:export-ydpi="644.96997"> | ||
| 311 | + <path | ||
| 312 | + sodipodi:nodetypes="cc" | ||
| 313 | + inkscape:connector-curvature="0" | ||
| 314 | + id="path817" | ||
| 315 | + d="M 54.239583,160.73958 V 147.51042" | ||
| 316 | + style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker13182)" /> | ||
| 317 | + <path | ||
| 318 | + inkscape:connector-curvature="0" | ||
| 319 | + id="path819" | ||
| 320 | + d="M 76.729166,156.77083 H 75.876328 63.5" | ||
| 321 | + style="fill:none;stroke:#000000;stroke-width:0.26458332px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5567)" | ||
| 322 | + sodipodi:nodetypes="ccc" /> | ||
| 323 | + <path | ||
| 324 | + sodipodi:nodetypes="cc" | ||
| 325 | + inkscape:connector-curvature="0" | ||
| 326 | + id="path819-8" | ||
| 327 | + d="M 70.114583,152.80208 H 63.5" | ||
| 328 | + style="fill:none;stroke:#ff0000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5491)" /> | ||
| 329 | + <path | ||
| 330 | + sodipodi:nodetypes="cc" | ||
| 331 | + inkscape:connector-curvature="0" | ||
| 332 | + id="path819-8-9" | ||
| 333 | + d="M 67.46875,148.83333 H 63.5" | ||
| 334 | + style="fill:none;stroke:#0000ff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5491-1)" /> | ||
| 335 | + <path | ||
| 336 | + sodipodi:nodetypes="cc" | ||
| 337 | + inkscape:connector-curvature="0" | ||
| 338 | + id="path819-8-9-2" | ||
| 339 | + d="m 58.208333,147.51042 h -3.96875" | ||
| 340 | + style="fill:none;stroke:#0000ff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5491-1-7)" /> | ||
| 341 | + <path | ||
| 342 | + sodipodi:nodetypes="cc" | ||
| 343 | + inkscape:connector-curvature="0" | ||
| 344 | + id="path819-8-4" | ||
| 345 | + d="M 60.854167,160.73958 H 54.239584" | ||
| 346 | + style="fill:none;stroke:#ff0000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5491-5)" /> | ||
| 347 | + <path | ||
| 348 | + sodipodi:nodetypes="cc" | ||
| 349 | + inkscape:connector-curvature="0" | ||
| 350 | + id="path819-8-9-20" | ||
| 351 | + d="m 50.270833,147.51042 h 3.96875" | ||
| 352 | + style="fill:none;stroke:#0000ff;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5491-1-9)" /> | ||
| 353 | + <path | ||
| 354 | + sodipodi:nodetypes="cc" | ||
| 355 | + inkscape:connector-curvature="0" | ||
| 356 | + id="path819-8-9-6" | ||
| 357 | + d="m 47.624999,160.73958 h 6.614584" | ||
| 358 | + style="fill:none;stroke:#ff0000;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker5491-1-1)" /> | ||
| 359 | + </g> | ||
| 360 | + <text | ||
| 361 | + xml:space="preserve" | ||
| 362 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.23472226px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | ||
| 363 | + x="48.826588" | ||
| 364 | + y="157.38641" | ||
| 365 | + id="text12334" | ||
| 366 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 367 | + inkscape:export-xdpi="644.96997" | ||
| 368 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 369 | + sodipodi:role="line" | ||
| 370 | + id="tspan12332" | ||
| 371 | + x="48.826588" | ||
| 372 | + y="157.38641" | ||
| 373 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.23472226px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">(x1,y1)</tspan></text> | ||
| 374 | + <text | ||
| 375 | + xml:space="preserve" | ||
| 376 | + style="font-style:normal;font-weight:normal;font-size:1.23472222px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;" | ||
| 377 | + x="58.786926" | ||
| 378 | + y="143.84509" | ||
| 379 | + id="text12334-5" | ||
| 380 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 381 | + inkscape:export-xdpi="644.96997" | ||
| 382 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 383 | + sodipodi:role="line" | ||
| 384 | + id="tspan12332-7" | ||
| 385 | + x="58.786926" | ||
| 386 | + y="143.84509" | ||
| 387 | + style="font-size:1.23472222px;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;">(x2,y2)</tspan></text> | ||
| 388 | + <text | ||
| 389 | + xml:space="preserve" | ||
| 390 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.23472226px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | ||
| 391 | + x="68.670227" | ||
| 392 | + y="160.12772" | ||
| 393 | + id="text12334-6" | ||
| 394 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 395 | + inkscape:export-xdpi="644.96997" | ||
| 396 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 397 | + sodipodi:role="line" | ||
| 398 | + x="68.670227" | ||
| 399 | + y="160.12772" | ||
| 400 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.23472226px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332" | ||
| 401 | + id="tspan12362">(dx_p,dy_p)</tspan></text> | ||
| 402 | + <text | ||
| 403 | + xml:space="preserve" | ||
| 404 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.23472226px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332" | ||
| 405 | + x="66.845749" | ||
| 406 | + y="154.74429" | ||
| 407 | + id="text12334-1" | ||
| 408 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 409 | + inkscape:export-xdpi="644.96997" | ||
| 410 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 411 | + sodipodi:role="line" | ||
| 412 | + id="tspan12332-2" | ||
| 413 | + x="66.845749" | ||
| 414 | + y="154.74429" | ||
| 415 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.23472226px;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;stroke-width:0.26458332">(dx_p_s,dy_p_s)</tspan></text> | ||
| 416 | + <text | ||
| 417 | + xml:space="preserve" | ||
| 418 | + style="font-style:normal;font-weight:normal;font-size:1.23472222px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;" | ||
| 419 | + x="68.20369" | ||
| 420 | + y="150.40446" | ||
| 421 | + id="text12334-7" | ||
| 422 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 423 | + inkscape:export-xdpi="644.96997" | ||
| 424 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 425 | + sodipodi:role="line" | ||
| 426 | + id="tspan12332-0" | ||
| 427 | + x="68.20369" | ||
| 428 | + y="150.40446" | ||
| 429 | + style="stroke-width:0.26458332;font-size:1.23472222px;-inkscape-font-specification:'sans-serif, Normal';font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;">(dx_p_s_t,dy_p_s_t)</tspan></text> | ||
| 430 | + <text | ||
| 431 | + xml:space="preserve" | ||
| 432 | + style="font-style:normal;font-weight:normal;font-size:1.23472222px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;" | ||
| 433 | + x="51.850914" | ||
| 434 | + y="141.56651" | ||
| 435 | + id="text12334-3" | ||
| 436 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 437 | + inkscape:export-xdpi="644.96997" | ||
| 438 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 439 | + sodipodi:role="line" | ||
| 440 | + id="tspan12332-4" | ||
| 441 | + x="51.850914" | ||
| 442 | + y="141.56651" | ||
| 443 | + style="font-size:1.23472222px;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;">(x1_c,y1_c)</tspan></text> | ||
| 444 | + <text | ||
| 445 | + xml:space="preserve" | ||
| 446 | + style="font-style:normal;font-weight:normal;font-size:1.23472222px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;" | ||
| 447 | + x="59.944656" | ||
| 448 | + y="147.82278" | ||
| 449 | + id="text12334-53" | ||
| 450 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 451 | + inkscape:export-xdpi="644.96997" | ||
| 452 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 453 | + sodipodi:role="line" | ||
| 454 | + id="tspan12332-76" | ||
| 455 | + x="59.944656" | ||
| 456 | + y="147.82278" | ||
| 457 | + style="font-size:1.23472222px;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;">(x2_c,y2_c)</tspan></text> | ||
| 458 | + <text | ||
| 459 | + xml:space="preserve" | ||
| 460 | + style="font-style:normal;font-weight:normal;font-size:1.23472222px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;" | ||
| 461 | + x="43.224407" | ||
| 462 | + y="151.82832" | ||
| 463 | + id="text12334-0" | ||
| 464 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 465 | + inkscape:export-xdpi="644.96997" | ||
| 466 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 467 | + sodipodi:role="line" | ||
| 468 | + id="tspan12332-06" | ||
| 469 | + x="43.224407" | ||
| 470 | + y="151.82832" | ||
| 471 | + style="font-size:1.23472222px;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;">(x3_c,y3_c)</tspan></text> | ||
| 472 | + <text | ||
| 473 | + xml:space="preserve" | ||
| 474 | + style="font-style:normal;font-weight:normal;font-size:1.23472222px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;" | ||
| 475 | + x="55.626766" | ||
| 476 | + y="160.44565" | ||
| 477 | + id="text12334-31" | ||
| 478 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 479 | + inkscape:export-xdpi="644.96997" | ||
| 480 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 481 | + sodipodi:role="line" | ||
| 482 | + id="tspan12332-00" | ||
| 483 | + x="55.626766" | ||
| 484 | + y="160.44565" | ||
| 485 | + style="font-size:1.23472222px;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;">(x4_c,y4_c)</tspan></text> | ||
| 486 | + <text | ||
| 487 | + xml:space="preserve" | ||
| 488 | + style="font-style:normal;font-weight:normal;font-size:1.23472222px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;" | ||
| 489 | + x="74.147598" | ||
| 490 | + y="169.07216" | ||
| 491 | + id="text12334-2" | ||
| 492 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 493 | + inkscape:export-xdpi="644.96997" | ||
| 494 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 495 | + sodipodi:role="line" | ||
| 496 | + id="tspan12332-74" | ||
| 497 | + x="74.147598" | ||
| 498 | + y="169.07216" | ||
| 499 | + style="font-size:1.23472222px;stroke-width:0.26458332;-inkscape-font-specification:'sans-serif, Normal';font-family:sans-serif;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;">x</tspan></text> | ||
| 500 | + <text | ||
| 501 | + xml:space="preserve" | ||
| 502 | + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:1.23472222px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;letter-spacing:0px;word-spacing:0px;writing-mode:lr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.26458332;" | ||
| 503 | + x="39.935497" | ||
| 504 | + y="141.61244" | ||
| 505 | + id="text12334-2-1" | ||
| 506 | + inkscape:export-filename="/home/gwj/taper.png" | ||
| 507 | + inkscape:export-xdpi="644.96997" | ||
| 508 | + inkscape:export-ydpi="644.96997"><tspan | ||
| 509 | + sodipodi:role="line" | ||
| 510 | + id="tspan13160" | ||
| 511 | + x="39.935497" | ||
| 512 | + y="141.61244">y</tspan></text> | ||
| 513 | + </g> | ||
| 514 | +</svg> |
07-tapered_bullet/cannon.c
| @@ -72,27 +72,32 @@ void draw_bullet(int x1, int y1, int x2, int y2, int width, double taper, int co | @@ -72,27 +72,32 @@ void draw_bullet(int x1, int y1, int x2, int y2, int width, double taper, int co | ||
| 72 | int dy = y2 - y1; | 72 | int dy = y2 - y1; |
| 73 | 73 | ||
| 74 | // define vector perpendicular to the central line | 74 | // define vector perpendicular to the central line |
| 75 | - int dy_p = dx; | ||
| 76 | int dx_p = dy; | 75 | int dx_p = dy; |
| 76 | + int dy_p = -dx; | ||
| 77 | double len = hypot(dx_p, dy_p); | 77 | double len = hypot(dx_p, dy_p); |
| 78 | 78 | ||
| 79 | // scale its length to proper width | 79 | // scale its length to proper width |
| 80 | - int dy_p_s = width / (2.0 * len) * dy_p; | ||
| 81 | int dx_p_s = width / (2.0 * len) * dx_p; | 80 | int dx_p_s = width / (2.0 * len) * dx_p; |
| 81 | + int dy_p_s = width / (2.0 * len) * dy_p; | ||
| 82 | + | ||
| 83 | + | ||
| 84 | + // scale the vector by taper | ||
| 85 | + int dx_p_s_t = dx_p_s * taper; | ||
| 86 | + int dy_p_s_t = dy_p_s * taper; | ||
| 82 | 87 | ||
| 83 | // compute corners | 88 | // compute corners |
| 84 | 89 | ||
| 85 | - int x1c = x2 - dx_p_s * taper; | ||
| 86 | - int y1c = y2 + dy_p_s * taper; | 90 | + int x1c = x2 - dx_p_s_t; |
| 91 | + int y1c = y2 - dy_p_s_t; | ||
| 87 | 92 | ||
| 88 | - int x2c = x2 + dx_p_s * taper; | ||
| 89 | - int y2c = y2 - dy_p_s * taper; | 93 | + int x2c = x2 + dx_p_s_t; |
| 94 | + int y2c = y2 + dy_p_s_t; | ||
| 90 | 95 | ||
| 91 | int x3c = x1 - dx_p_s; | 96 | int x3c = x1 - dx_p_s; |
| 92 | - int y3c = y1 + dy_p_s; | 97 | + int y3c = y1 - dy_p_s; |
| 93 | 98 | ||
| 94 | int x4c = x1 + dx_p_s; | 99 | int x4c = x1 + dx_p_s; |
| 95 | - int y4c = y1 - dy_p_s; | 100 | + int y4c = y1 + dy_p_s; |
| 96 | 101 | ||
| 97 | gfx_filledTriangle(x1c, y1c, x2c, y2c, x3c, y3c, color); | 102 | gfx_filledTriangle(x1c, y1c, x2c, y2c, x3c, y3c, color); |
| 98 | gfx_filledTriangle(x4c, y4c, x2c, y2c, x3c, y3c, color); | 103 | gfx_filledTriangle(x4c, y4c, x2c, y2c, x3c, y3c, color); |