float y2
)
{
- float lineSize = (float) sqrt((x1 - x2) * (x1 - x2)
- + (y1 - y2) * (y1 - y2));
- if (lineSize == 0)
+ double lineSize = sqrt((x1 - x2) * (x1 - x2)
+ + (y1 - y2) * (y1 - y2));
+ double sqrLineSize = lineSize * lineSize;
+
+ // TODO: What should I do here for near 0?
+ if (-0.00000000001 <= sqrLineSize && sqrLineSize <= 0.00000000001)
+ {
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);
+ + (vec.m_fY - y1) * (y2 - y1)) / sqrLineSize;
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);
T_OPTFLAGS := -O2
T_DBGFLAGS := -ggdb
T_PRFFLAGS := ${T_DBGFLAGS} -pg
-T_WARFLAGS := -Wall -Wextra -pedantic -ansi -Wshadow
+
+T_WARFLAGS :=
+T_WARFLAGS += -Wall
+T_WARFLAGS += -Wextra
+T_WARFLAGS += -pedantic
+T_WARFLAGS += -ansi
+T_WARFLAGS += -Wshadow
+T_WARFLAGS += -Wswitch-enum
+T_WARFLAGS += -Wfloat-equal
+T_WARFLAGS += -Wundef
G_CXXFLAGS := ${T_WARFLAGS}
ifeq (${G_BUILD},${B_DEBUG})