<svg width="500" height="500" viewBox="0 0 500 500">
  <defs>
    <marker id="ball" refX="5" refY="5" markerWidth="10" markerHeight="10">
      <circle cx="5" cy="5" r="5" fill="black" />
    </marker>
<!--     arrow head marker -->
    <marker id="arrowhead" orient="auto" refX="5" refY="5" markerWidth="10" markerHeight="10">
      <polygon points="0,0 10,5 0,10" fill="black" stroke="black" />
    </marker>
<!--     arrow head using auto reverse -->
    <marker id="arrowhead_ar" orient="auto-start-reverse" refX="5" refY="5" markerWidth="10" markerHeight="10">
      <polygon points="0,0 10,5 0,10" fill="black" stroke="black" />
    </marker>
<!--     block marker using 90deg orientation -->
    <marker id="block" orient="90deg" refX="5" refY="5" markerWidth="10" markerHeight="10">
      <rect x="0" y="0" width="10" height="10" fill="black" />
    </marker>
  </defs>

  <polyline marker-start="url(#ball)" marker-end="url(#arrowhead)" stroke="black" strokeWidth="2" fill="none" points="50, 100 250,50" />
  
  <polyline marker-start="url(#block)" marker-end="url(#arrowhead)" marker-mid="url(#ball)" stroke="black" strokeWidth="2" fill="none" points="50,150 150,150 250,150 350,150 450,150" />
  
  <polyline marker-start="url(#arrowhead_ar)" marker-end="url(#arrowhead)" stroke="black" strokeWidth="2" fill="none" points="50, 200 250,250" />
  
  <polyline marker-start="url(#ball)" marker-end="url(#arrowhead)" stroke="black" marker-mid="url(#block)" strokeWidth="2" fill="none" points="50,350 250,300 300,400 400,200 450,400" />
</svg>
Run Pen

External CSS

  1. https://codepen.io/aokorodu/pen/poBNOgp.css

External JavaScript

  1. https://unpkg.com/gsap@3/dist/gsap.min.js
  2. https://cdn.tailwindcss.com
  3. https://cdn.jsdelivr.net/npm/noisejs@2.1.0/index.min.js