Розширений пошук вписаних квадратів

Інструменти малювання

Математичні дані

Дані про криву відсутні

Про пошук вписаних квадратів

Математичні основи

Формула шнурівки

Ми використовуємо формулу шнурівки (також відому як формула землеміра) для обчислення площі багатокутника, утвореного кривою:

A=12i=1n1(xiyi+1+xny1)i=1n1(xi+1yi+x1yn)A = \frac{1}{2}\left|\sum_{i=1}^{n-1} (x_i y_{i+1} + x_n y_1) - \sum_{i=1}^{n-1} (x_{i+1} y_i + x_1 y_n)\right|

Де (xi, yi) - координати i-ї вершини багатокутника.

Реалізація алгоритму

Пошук вписаного квадрата

Цей алгоритм використовує метод Монте-Карло, пробуючи випадкові точки всередині кривої для пошуку найбільшого вписаного квадрата.

function findInscribedSquare(curve) {
  const minX = Math.min(...curve.map(p => p.x));
  const maxX = Math.max(...curve.map(p => p.x));
  const minY = Math.min(...curve.map(p => p.y));
  const maxY = Math.max(...curve.map(p => p.y));

  let bestSquare = [];
  let maxSize = 0;

  for (let i = 0; i < 1000; i++) {
    const center = getRandomPointInside(curve);
    let low = 0;
    let high = Math.min(maxX - minX, maxY - minY);

    while (high - low > 1) {
      const mid = (low + high) / 2;
      const square = [
        { x: center.x - mid / 2, y: center.y - mid / 2 },
        { x: center.x + mid / 2, y: center.y - mid / 2 },
        { x: center.x + mid / 2, y: center.y + mid / 2 },
        { x: center.x - mid / 2, y: center.y + mid / 2 },
      ];

      if (square.every(p => isPointInside(p, curve))) {
        if (mid > maxSize) {
          maxSize = mid;
          bestSquare = square;
        }
        low = mid;
      } else {
        high = mid;
      }
    }
  }

  return bestSquare;
}

Цей алгоритм використовує метод Монте-Карло, пробуючи випадкові точки всередині кривої для пошуку найбільшого вписаного квадрата.

Пошук описаного квадрата

Цей алгоритм знаходить обмежувальну рамку кривої та створює квадрат, який повністю її охоплює.

function findExtendedSquare(curve) {
  const minX = Math.min(...curve.map(p => p.x));
  const maxX = Math.max(...curve.map(p => p.x));
  const minY = Math.min(...curve.map(p => p.y));
  const maxY = Math.max(...curve.map(p => p.y));

  const centerX = (minX + maxX) / 2;
  const centerY = (minY + maxY) / 2;
  const size = Math.max(maxX - minX, maxY - minY);

  return [
    { x: centerX - size / 2, y: centerY - size / 2 },
    { x: centerX + size / 2, y: centerY - size / 2 },
    { x: centerX + size / 2, y: centerY + size / 2 },
    { x: centerX - size / 2, y: centerY + size / 2 },
  ];
}

Цей алгоритм знаходить обмежувальну рамку кривої та створює квадрат, який повністю її охоплює.

Вступ

Ласкаво просимо до пошуку вписаних квадратів, інтерактивного інструменту, що досліджує захоплюючий світ геометрії та математичних гіпотез.

Цей додаток дозволяє малювати замкнуті криві та знаходити вписані в них квадрати, оживляючи столітню математичну проблему.

Ключові концепції

Замкнуті криві

Замкнута крива - це безперервна петля на площині, як коло або будь-яка форма, що закінчується там, де починається.

Вписані квадрати

Вписаний квадрат - це квадрат, який ідеально вписується всередину замкнутої кривої, причому всі чотири кути торкаються кривої.

Описані квадрати

Описаний квадрат - це найменший квадрат, який повністю охоплює замкнуту криву.

Обчислення площі

Площа кривої та квадратів обчислюється за допомогою передових геометричних алгоритмів.

Довжина кривої

Загальна відстань навколо кривої, виміряна в кілопікселях.

Як користуватися

1

Виберіть інструмент малювання на панелі інструментів.

2

Намалюйте замкнуту криву на полотні.

3

Натисніть 'Знайти вписаний квадрат', щоб знайти вписаний квадрат.

4

Натисніть 'Знайти описаний квадрат', щоб знайти охоплюючий квадрат.

5

Перегляньте математичні дані для вашої кривої та квадратів.

6

Використовуйте кнопку 'Очистити', щоб почати заново з новою кривою.

7

Експериментуйте з різними формами та порівнюйте результати!

Подальше дослідження

Проблема вписаного квадрата відкриває багато шляхів для математичного дослідження:

Дослідіть, як часто ідеально круглі криві дають вписані квадрати.

Вивчіть різні алгоритми для більш ефективного пошуку вписаних квадратів.

Вивчіть зв'язок між площею кривої та її вписаним квадратом.

Розгляньте, як ця проблема може бути розширена до трьох вимірів з вписаними кубами.

Приємного дослідження, і нехай ваша математична цікавість ніколи не згасає!

Створено Луїсом, веб-розробником з Мексики

Переглянути вихідний код