void toxi::geom::Polygon2D::offsetCorner( const float & x1, const float & y1, const float & x2, const float & y2, const float & x3, const float & y3, const float & distance, Vec2D * out ) { float c1 = x2, d1 = y2, c2 = x2, d2 = y2; float dx1, dy1, dist1, dx2, dy2, dist2, insetX, insetY; dx1 = x2 - x1; dy1 = y2 - y1; dist1 = (float) toxi::math::MathUtils::sqrt(dx1 * dx1 + dy1 * dy1); dx2 = x3 - x2; dy2 = y3 - y2; dist2 = (float) toxi::math::MathUtils::sqrt(dx2 * dx2 + dy2 * dy2); if (dist1 < toxi::math::MathUtils::EPS || dist2 < toxi::math::MathUtils::EPS) { return; } dist1 = distance / dist1; dist2 = distance / dist2; insetX = dy1 * dist1; insetY = -dx1 * dist1; float _x1 = x1 +insetX; c1 += insetX; float _y1 = y1 + insetY; d1 += insetY; insetX = dy2 * dist2; insetY = -dx2 * dist2; float _x3 = x3 + insetX; c2 += insetX; float _y3 = y3 + insetY; d2 += insetY; if (c1 == c2 && d1 == d2) { out->set(c1, d1); return; } Line2D l1 = toxi::geom::Line2D( Vec2D(_x1, _y1), Vec2D(c1, d1)); Line2D l2 = toxi::geom::Line2D( Vec2D(c2, d2), Vec2D(_x3, _y3)); LineIntersection isec = l1.intersectLine( l2); Vec2D ipos = isec.getPos(); if (ipos.isZeroVector()) { out->set(ipos); } }