Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void rotat(double x, double y, double &x1, double &y1, double ang){
- double vx = x1 - x;
- double vy = y1 - y;
- double nx = vx * cos(ang) - vy * sin(ang);
- double ny = vx * sin(ang) + vy * cos(ang);
- x1 = x + nx;
- y1 = y + ny;
- }
- pair<double, double> f(double x1, double y1, double a, double x2, double y2, double b, double ang){
- double c = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
- rotat(x2, y2, x1, y1, ang);
- double vx = x1 - x2;
- double vy = y1 - y2;
- double nx = vx * b / c;
- double ny = vy * b / c;
- x1 = x2 + nx;
- y1 = y2 + ny;
- return {x1, y1};
- }
- pair<double, double> getCircle(double x1, double y1, double r1, double x2, double y2, double r2, double r, bool alternative = false){
- double a = r1 + r;
- double b = r2 + r;
- double c = sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
- double ang = acos((b * b + c * c - a * a) / (2 * b * c));
- if(alternative) return f(x1, y1, a, x2, y2, b, ang);
- else return f(x1, y1, a, x2, y2, b, -ang);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement