MCPcopy Create free account
hub / github.com/BZFlag-Dev/bzflag / getDistance

Method getDistance

src/clientbase/Region.cpp:88–132  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

86
87
88float BzfRegion::getDistance(const fvec2& p, fvec2& nearest) const {
89 const size_t count = corners.size();
90 float currentDistance = maxDistance;
91 float pointDistance;
92
93 //compute distance from any edge
94 const float* p1 = corners[count - 1].get();
95 const float* p2 = NULL;
96 fvec2 d;
97 fvec2 m;
98 float t;
99 float edgeSquareDist;
100 float x, y;
101 for (size_t c = 0; c < count; c++) {
102 p2 = corners[c].get();
103 d[0] = p2[0] - p1[0];
104 d[1] = p2[1] - p1[1];
105 m[0] = p[0] - p1[0];
106 m[1] = p[1] - p1[1];
107 edgeSquareDist = d[0] * d[0] + d[1] * d[1];
108 t = (m[0] * d[0] + m[1] * d[1]) / edgeSquareDist;
109 if (t <= 0) {
110 pointDistance = hypotf(m[0], m[1]);
111 x = p1[0];
112 y = p1[1];
113 }
114 else if (t >= 1) {
115 pointDistance = hypotf(m[0] - d[0], m[1] - d[1]);
116 x = p2[0];
117 y = p2[1];
118 }
119 else {
120 pointDistance = hypotf(m[0] - t * d[0], m[1] - t * d[1]);
121 x = p1[0] + t * d[0];
122 y = p1[1] + t * d[1];
123 }
124 if (pointDistance < currentDistance) {
125 currentDistance = pointDistance;
126 nearest[0] = x;
127 nearest[1] = y;
128 }
129 p1 = p2;
130 }
131 return currentDistance;
132}
133
134
135int BzfRegion::classify(const fvec2& e1, const fvec2& e2) const {

Callers 3

findRegionMethod · 0.45
findPathMethod · 0.45
onScannedRobotMethod · 0.45

Calls 2

sizeMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected