﻿// (c) Copyright 2012, The Software Ranch LLC and Morpho-Graphics LLC. All rights reserved

function length(x1, y1, x2, y2)
{
	var dx = x2 - x1;
	var dy = y2 - y1;
	return Math.sqrt((dx * dx) + (dy * dy));
}

function angle(x1, y1, x2, y2)
{
	var dx = x2 - x1;
	var dy = y2 - y1;
	return Math.atan2(dx, dy) * (180/Math.PI);
}

function angle3Pt(cx, cy, x1, y1, x2, y2)
{
	var ang1 = angle(cx, cy, x1, y1);
	var ang2 = angle(cx, cy, x2, y2);
	return ang1 - ang2;
}

function intersectPointLine(point, line)
{
	var px = point.x;
	var py = point.y;

	var x1 = line.x1;
	var y1 = line.y1;
	var x2 = line.x2;
	var y2 = line.y2;

	if (x1 == x2 && y1 == y2)
	{
		// Points are the same
		return null;
	}

	var lineLength = length(x1, y1, x2, y2);

	var u = (((px - x1) * (x2 - x1)) + ((py - y1) * (y2 - y1)))
	u = u / (lineLength * lineLength)

	var ix = x1 + u * (x2 - x1);
	var iy = y1 + u * (y2 - y1);

	return new Point(ix, iy);
}

function distPointToLine(point, line)
{
	var iPoint = intersectPointLine(point, line);
	if (iPoint != null)
	{
		return length(point.x, point.y, iPoint.x, iPoint.y);
	}
	return null;
}

function vectorAngle(line1, line2)
{
	var dot = dotProduct(line1, line2);
	var len1 = length(line1.x1, line1.y1, line1.x2, line1.y2);
	var len2 = length(line2.x1, line2.y1, line2.x2, line2.y2);

	var ang = Math.acos(dot / (len1 * len2)) * (180 / Math.PI);
	return ang;
}

function dotProduct(line1, line2)
{
	var x1 = line1.x2 - line1.x1;
	var y1 = line1.y2 - line1.y1;
	var x2 = line2.x2 - line2.x1;
	var y2 = line2.y2 - line2.y1;
	return (x1 * x2) + (y1 * y2);
}


