E086. Пересечение двух окружностей

e-maxx algorithm original: C/C++ #algorithm #emaxx #geometry #math
Văn bản bài toán được dịch từ tiếng Nga theo ngôn ngữ giao diện. Mã không thay đổi.

Источник: e-maxx.ru/algo, страница PDF 248.

given две окружности, каждая определена координатами своего центра и радиусом. it is required find все их точки пересечения (либо одна, либо две, либо ни одной точки, либо окружности совпадают).

Lời giải

Сведём нашу задачу к задаче о Пересечении окружности и прямой. Предположим, не теряя общности, что центр первой окружности - в начале координат (если это не так, то перенесём центр в начало координат, а при выводе ответа будем обратно прибавлять координаты центра). Тогда мы имеем систему двух уравнений:

x2 + y2 = r12

(x - x2)2 + (y - y2)2 = r22

Вычтем из второго уравнения первое, чтобы избавиться от квадратов переменных:

x2 + y2 = r12

x (-2x2) + y (-2y2) + (x22 + y22 + r12 - r22) = 0

Таким образом, мы свели задачу о пересечении двух окружностей к задаче о пересечении первой окружности и следующей прямой:

Ax + By + C = 0,

A = -2x2,

B = -2y2,

C = x22 + y22 + r12 - r22. А Lời giải последней задачи описано в соответствующей статье. Единственный вырожденный случай, который надо рассмотреть отдельно - когда центры окружностей совпадают. Действительно, в этом случае вместо уравнения прямой мы получим уравнение вида 0 = С, где C - некоторое number, и этот случай будет обрабатываться некорректно. Поэтому этот случай нужно рассмотреть отдельно: если радиусы окружностей совпадают, то ответ - бесконечность, иначе - точек пересечения нет.

C# lời giải

bản nháp tự động, xem lại trước khi gửi
using System;
using System.Collections.Generic;
using System.Linq;

public static class AlgorithmDraft
{
    // Auto-generated C# draft from the original e-maxx C/C++ listing. Review before production use.
    x2 + y2 = r12
    (x - x2)2 + (y - y2)2 = r22
    x2 + y2 = r12
    x (-2x2) + y (-2y2) + (x22 + y22 + r12 - r22) = 0
    Ax + By + C = 0,
    A = -2x2,
    B = -2y2,
    C = x22 + y22 + r12 - r22.
}

C++ lời giải

đã khớp/gốc
x2 + y2 = r12
(x - x2)2 + (y - y2)2 = r22
x2 + y2 = r12
x (-2x2) + y (-2y2) + (x22 + y22 + r12 - r22) = 0
Ax + By + C = 0,
A = -2x2,
B = -2y2,
C = x22 + y22 + r12 - r22.

Java lời giải

bản nháp tự động, xem lại trước khi gửi
import java.util.*;
import java.math.*;

public class AlgorithmDraft {
    // Auto-generated Java draft from the original e-maxx C/C++ listing. Review before production use.
    x2 + y2 = r12
    (x - x2)2 + (y - y2)2 = r22
    x2 + y2 = r12
    x (-2x2) + y (-2y2) + (x22 + y22 + r12 - r22) = 0
    Ax + By + C = 0,
    A = -2x2,
    B = -2y2,
    C = x22 + y22 + r12 - r22.
}

Материал разбит как Thuật toánическая Bài toán: изучить постановку, понять асимптотику и реализовать Thuật toán на выбранном языке.

Vacancies for this task

việc làm đang hoạt động with overlapping task tags are đã hiển thị.

Tất cả việc làm
Chưa có việc làm đang hoạt động.