+/*
+ * 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.m_fX, y1 - vec.m_fY);
+
+ float u = ((vec.m_fX - x1) * (x2 - x1)
+ + (vec.m_fY - y1) * (y2 - y1)) / (lineSize * lineSize);
+
+ if (u < 0)
+ return Vector2(x1 - vec.m_fX, y1 - vec.m_fY);
+ else if (u > 1)
+ return Vector2(x2 - vec.m_fX, y2 - vec.m_fY);
+ else
+ {
+ float ix = x1 + u * (x2 - x1);
+ float iy = y1 + u * (y2 - y1);
+ return Vector2(ix - vec.m_fX, iy - vec.m_fY);
+ }
+}
+
Vector2 perp(const Vector2& vec)
{
- return Vector2(-vec.y, vec.x);
+ return Vector2(-vec.m_fY, vec.m_fX);
}
float dot(const Vector2& vec1, const Vector2& vec2)
{
- return vec1.x * vec2.x + vec1.y * vec2.y;
+ return vec1.m_fX * vec2.m_fX + vec1.m_fY * vec2.m_fY;
}
//TODO float Vector2::projectionCoeff(const Vector2* vec) const;