@nimbus214

Как найти принадлежность точки к закрашенной области на плоскости?

координаты только положительные( получается это только первая четверть от всей плоскости), сама плоскость бесконечна.
6152f1df93d25008722385.jpeg
  • Вопрос задан
  • 281 просмотр
Пригласить эксперта
Ответы на вопрос 3
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Отдельно проверьте, что точка в первой четверти.

Далее, фигура повторяется блоками 2x2, т.е. вам не важны сами координаты, а только их положение в блоке.

Для высчитывания координаты в блоке можно или вычитать 2, пока координата больше 2, или вычесть из x (floor(x) - floor(x)%2). floor(x) даст целые числа. Потом надо это число сделать четным, возможно вычесть 1. floor(x)%2 - как раз и даст нам, что надо вычесть.

А дальше - набор if-ов. вам надо лишь описать, что точка принадлежит одной из двух четвретринок круга в левом нижнем углу.
Ответ написан
Комментировать
Alexandroppolus
@Alexandroppolus
кодир
Во, это уже прикольно )
квадратики - 1х1 ?

навскидку так:
if (Math.ceil(y) % 2 && !(Math.floor(x) % 2)) {
  return ((x - Math.floor(x)) ^ 2 + (y - Math.ceil(y)) ^ 2 <= 1);
}
if (!(Math.ceil(x) % 2) && Math.floor(y) % 2) {
  return ((x - Math.ceil(x)) ^ 2 + (y - Math.floor(y)) ^ 2 <= 1);
}
return false;


Math.ceil - округление вверх, Math.floor - вниз, ^ 2 - в квадрате
Ответ написан
Тут как бы закрашенные круги, с шагом 2:
с центрами в ( 2 * i, 1 + 2 * j ) где i и j целые.
У кругов отрезали нечетные четверти.

На C++ не пишу, пример на JS:
function isInArea(x, y) {
  centerX = 2 * Math.round(x/2);
  centerY = 1 + 2 * Math.round((y - 1)/2);
  if (! ((x >= centerX) ^ (y >= centerY))) { // НЕ (XOR)
    return false;  // не та четверть
  }
  // проверить расстояние
  return 1 >= (x - centerX) * (x - centerX) + (y - centerY) * (y - centerY);
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы