+/*
+ * Copyright (C) 2008 Patrik Gornicz, Gornicz_P (at) hotmail (dot) com.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
#include "mathw.h"
// Vector2 Math
+Vector2 vectorToLine
+(
+ const Vector2& vec,
+ float x1,
+ float y1,
+ float x2,
+ float y2
+)
+{
+ float lineSize = (float) sqrt((x1 - x2) * (x1 - x2)
+ + (y1 - y2) * (y1 - y2));
+ if (lineSize == 0)
+ return Vector2(x1 - vec.x, y1 - vec.y);
+
+ float u = ((vec.x - x1) * (x2 - x1)
+ + (vec.y - y1) * (y2 - y1)) / (lineSize * lineSize);
+
+ if (u < 0)
+ return Vector2(x1 - vec.x, y1 - vec.y);
+ else if (u > 1)
+ return Vector2(x2 - vec.x, y2 - vec.y);
+ else
+ {
+ float ix = x1 + u * (x2 - x1);
+ float iy = y1 + u * (y2 - y1);
+ return Vector2(ix - vec.x, iy - vec.y);
+ }
+}
+
Vector2 perp(const Vector2& vec)
{
return Vector2(-vec.y, vec.x);