Как определить, перекрываются ли круг и квадрат, когда их центры выровнены - PullRequest
0 голосов
/ 18 октября 2019

Я не обязательно ищу код для решения этой проблемы, но больше, чтобы выяснить логику, стоящую за ней.

Я делаю домашнее задание для класса Computer Science, который я беру, и одна из проблем гласит: «Метод isUntangled, который принимает два параметра: диаметр круга и длину стороны квадрата, оба типа double. Он возвращает истину тогда и только тогда, когда окружность и квадрат не пересекаются, когда их центры выровнены "

Это изображение, предоставленное для понимания: Изображение

Я попытался просто вернуть True, если диаметр меньше длины стороны квадратов, или вернуть True, если длина стороны квадрата меньше диаметра круга. Оглядываясь назад, я понимаю, почему это не сработало.

Я больше вижу, может ли кто-нибудь объяснить логику / математику, которая может быть использована для решения этой проблемы.

Спасибо

Ответы [ 4 ]

1 голос
/ 19 октября 2019

Есть 2 способа понять логику

1. Средний квадратный гибкий круг

  • Предположим, что есть квадрат среднего размера, в центре которого очень маленький круг.
  • увеличьте диаметр круга и проверьте все случаи.
      1. первый круг полностью внутри квадрата.
    • когда диаметр и длина стороны становятся одинаковыми , сторона касания круга в средней точке. (всего 4 касания)
  • после этого, круг пересекается 2 раза с каждой стороны до шага 4. (всего 8 пересечений)
  • в прошлый раз круг касался только углов квадрата. в это время нам нужно найти какой диаметр круга? (всего 4 касания)
    • в это время диагонали квадратного сенсорного круга (это аккорды) и также проходят через центр круга, поэтому диагонали имеют диаметр
    • диаметр = диагональ = сторона * √2
  • после этого круг полностью покидает квадрат.

2. средний круг гибкий квадрат

  • предположим, что естькруг среднего размера и в центре, очень маленький квадрат.
  • увеличить длину стороны квадрата и проверить все случаи.
      1. сначала квадрат полностью внутри круга.
    • первый круг квадрата угла касания. (всего 4 касания) в это время нам нужно найти длину стороны? (всего 4 касания)
      • того времени диагонали квадратного сенсорного круга (его аккорды) и также проходят через центр круга, поэтому диагонали имеют диаметр
      • сторона = диагональ / √2 = диаметр / √2
  • после этого квадраты пересекаются 2 раза с кружком до шага 4. (всего 8 пересечений)
  • в последний раз, когда диаметр и длина стороны становятся одинаковыми , только середина сторон квадрата касается круга.
  • после этого квадрат полностью покидает окружность.

так что в этом случае окружность и квадрат касаются между этими двумя состояниями (то же самое воба случая).

0 голосов
/ 18 октября 2019

С выравниванием центров можно выделить три случая:

  1. окружность за пределами квадрата
  2. окружность и квадрат пересекаются
  3. квадрат внутри окружности.

'3' применяется, если диаметр круга меньше половины длины квадрата.

'1' применяется, если диаметр круга больше расстояния от центра квадрата. в квадратный угол. это половина длины диагонали квадрата.

'2' применяется во всех других случаях.

0 голосов
/ 18 октября 2019

Уравнение круга: x^2 + y^2 = r^2 Вам нужно работать, только если одна из линий квадрата сталкивается с кругом, чтобы увидеть любые, если они сталкиваются, так как они выровнены в центре. Уравнение линии равно x = c, где c - константа. Вы можете подставить значение x или y в уравнение окружности. Например, для x = 2:

2^2 + y^2 = r^2 => 4 + y^2 = r^2

r вам тоже дается, поэтому замените его на r = 1 => 4 + y^2 = 1^2 = 1

=> y^2 = -3

Следовательно, поскольку нет (реального) квадратного корня из -3, они не сталкиваются.

Если круг достаточно большой относительно квадрата, будет реальное решениедо последней части. Наше уравнение линии, которая представляет сторону квадрата, на самом деле должно быть ограничено, так как квадраты прямые линии не продолжаются вечно, они останавливаются на x = y = +- square_length/2. Так что проверьте, если y(from equation) < y(square_height) (или x и width, они одинаковы). Итак, по сути, есть 2 случая, которые нужно проверить. Вы можете превратить это в код.

0 голосов
/ 18 октября 2019
return diameter > length && diameter / 2 < length / Math.sqrt(2)

Первое условие проверяет, что круг не внутри квадрата, а второе условие проверяет, что квадрат не внутри круга

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...