本文整理汇总了C++中point_t::distanceTo方法的典型用法代码示例。如果您正苦于以下问题:C++ point_t::distanceTo方法的具体用法?C++ point_t::distanceTo怎么用?C++ point_t::distanceTo使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类point_t
的用法示例。
在下文中一共展示了point_t::distanceTo方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _crossTwoCircles
static int _crossTwoCircles(point_t& pt1, point_t& pt2,
const point_t& c1, double r1,
const point_t& c2, double r2)
{
double d, a, b, c, p, q, r;
double cos_value[2], sin_value[2];
if (mgEquals(c1.x, c2.x) && mgEquals(c1.y, c2.y) && mgEquals(r1, r2)) {
return -1;
}
d = c1.distanceTo(c2);
if (d > r1 + r2 || d < fabs(r1 - r2)) {
return 0;
}
a = 2.0 * r1 * (c1.x - c2.x);
b = 2.0 * r1 * (c1.y - c2.y);
c = r2 * r2 - r1 * r1 - c1.distanceSquare(c2);
p = a * a + b * b;
q = -2.0 * a * c;
if (mgEquals(d, r1 + r2) || mgEquals(d, fabs(r1 - r2))) {
cos_value[0] = -q / p / 2.0;
sin_value[0] = sqrt(1 - cos_value[0] * cos_value[0]);
pt1.x = r1 * cos_value[0] + c1.x;
pt1.y = r1 * sin_value[0] + c1.y;
if (!mgEquals(pt1.distanceSquare(c2), r2 * r2)) {
pt1.y = c1.y - r1 * sin_value[0];
}
return 1;
}
r = c * c - b * b;
cos_value[0] = (sqrt(q * q - 4.0 * p * r) - q) / p / 2.0;
cos_value[1] = (-sqrt(q * q - 4.0 * p * r) - q) / p / 2.0;
sin_value[0] = sqrt(1 - cos_value[0] * cos_value[0]);
sin_value[1] = sqrt(1 - cos_value[1] * cos_value[1]);
pt1.x = r1 * cos_value[0] + c1.x;
pt2.x = r1 * cos_value[1] + c1.x;
pt1.y = r1 * sin_value[0] + c1.y;
pt2.y = r1 * sin_value[1] + c1.y;
if (!mgEquals(pt1.distanceSquare(c2), r2 * r2)) {
pt1.y = c1.y - r1 * sin_value[0];
}
if (!mgEquals(pt2.distanceSquare(c2), r2 * r2)) {
pt2.y = c1.y - r1 * sin_value[1];
}
if (mgEquals(pt1.y, pt2.y) && mgEquals(pt1.x, pt2.x)) {
if (pt1.y > 0) {
pt2.y = -pt2.y;
} else {
pt1.y = -pt1.y;
}
}
return 2;
}