arow method

dynamic arow(
  1. dynamic point1,
  2. dynamic point2,
  3. dynamic distance,
  4. dynamic length,
  5. dynamic data,
)

Implementation

arow(point1, point2, distance, length, data) {
  // slope is dx/dy
  var dx = point2[0] - point1[0];
  var dy = point2[1] - point1[1];
  // var v_norm = Math.sqrt(dx ** 2 + dy ** 2)
  var v_norm = sqrt(pow(dx, 2) + pow(dy, 2));

  // point on line at distance
  var point_on_line = [
    point2[0] - (distance * dx) / v_norm,
    point2[1] - (distance * dy) / v_norm
  ];

  // endpoints of arrows at length above point (the distance from the original line
  var point_below = [
    point_on_line[0] - (length * -dy) / v_norm,
    point_on_line[1] - (length * dx) / v_norm
  ];
  var point_above = [
    point_on_line[0] + (length * -dy) / v_norm,
    point_on_line[1] + (length * dx) / v_norm
  ];
  data.addAll([
    [
      "moveTo",
      [point_above[0], point_above[1]]
    ],
    [
      "lineTo",
      [point2[0], point2[1]]
    ],
    [
      "lineTo",
      [point_below[0], point_below[1]]
    ]
  ]);
}