В мире геометрии четырехугольники представляют собой разнообразные фигуры, включая прямоугольники, квадраты, ромбы и произвольные четырехугольники. Определить вид четырехугольника по его координатам вершин может быть нетривиальной задачей, но в то же время, она предоставляет увлекательную возможность визуально анализировать и классифицировать геометрические фигуры. В данной статье мы рассмотрим программу определения вида четырехугольника по координатам четырех вершин.
Теория
Для определения вида четырехугольника по его координатам вершин, вам необходимо выполнить следующие шаги:
- Ввести координаты четырех вершин четырехугольника.
- Вычислить длины всех сторон четырехугольника, используя формулу для расстояния между двумя точками в двумерном пространстве.
- Сравнить длины сторон и углы между ними, чтобы определить вид четырехугольника.
C++
Пример программы на C++, в которой вводятся координаты четырёх точек (a, b, c, d) на плоскости, вершины четырехугольника abcd и определяется тип четырёхугольника.
#include <iostream> #include <cmath> struct Point { double x, y; }; // Функция для вычисления расстояния между двумя точками double distance(Point p1, Point p2) { return sqrt((p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y)); } // Функция для определения вида четырехугольника std::string determineQuadrilateralType(Point A, Point B, Point C, Point D) { double AB = distance(A, B); double BC = distance(B, C); double CD = distance(C, D); double DA = distance(D, A); double diagonalAC = distance(A, C); double diagonalBD = distance(B, D); if (AB == BC && BC == CD && CD == DA) { return "Квадрат"; } else if (AB == CD && BC == DA) { return "Прямоугольник"; } else if (AB == BC && CD == DA && diagonalAC == diagonalBD) { return "Ромб"; } else { return "Произвольный четырехугольник"; } } int main() { Point A, B, C, D; std::cout << "Введите координаты вершины A (x y): "; std::cin >> A.x >> A.y; std::cout << "Введите координаты вершины B (x y): "; std::cin >> B.x >> B.y; std::cout << "Введите координаты вершины C (x y): "; std::cin >> C.x >> C.y; std::cout << "Введите координаты вершины D (x y): "; std::cin >> D.x >> D.y; std::string quadrilateralType = determineQuadrilateralType(A, B, C, D); std::cout << "Вид четырехугольника: " << quadrilateralType << std::endl; return 0; }
Эта программа позволяет вам ввести координаты четырех вершин и определить вид четырехугольника. Примечание: это простая программа, которая предполагает, что введенные координаты образуют четырехугольник. В реальных приложениях требуется дополнительная проверка на то, что координаты вершин образуют действительный четырехугольник.
C#
using System; public struct Point { public double X; public double Y; public Point(double x, double y) { X = x; Y = y; } } public class QuadrilateralTypeDeterminer { public static double Distance(Point p1, Point p2) { double dx = p1.X - p2.X; double dy = p1.Y - p2.Y; return Math.Sqrt(dx * dx + dy * dy); } public static string DetermineQuadrilateralType(Point A, Point B, Point C, Point D) { double AB = Distance(A, B); double BC = Distance(B, C); double CD = Distance(C, D); double DA = Distance(D, A); double diagonalAC = Distance(A, C); double diagonalBD = Distance(B, D); if (AB == BC && BC == CD && CD == DA) { return "Квадрат"; } else if (AB == CD && BC == DA) { return "Прямоугольник"; } else if (AB == BC && CD == DA && diagonalAC == diagonalBD) { return "Ромб"; } else { return "Произвольный четырехугольник"; } } public static void Main() { Point A, B, C, D; Console.Write("Введите координаты вершины A (x y): "); string[] coordinates = Console.ReadLine().Split(' '); A = new Point(double.Parse(coordinates[0]), double.Parse(coordinates[1]); Console.Write("Введите координаты вершины B (x y): "); coordinates = Console.ReadLine().Split(' '); B = new Point(double.Parse(coordinates[0]), double.Parse(coordinates[1]); Console.Write("Введите координаты вершины C (x y): "); coordinates = Console.ReadLine().Split(' '); C = new Point(double.Parse(coordinates[0]), double.Parse(coordinates[1]); Console.Write("Введите координаты вершины D (x y): "); coordinates = Console.ReadLine().Split(' '); D = new Point(double.Parse(coordinates[0]), double.Parse(coordinates[1]); string quadrilateralType = DetermineQuadrilateralType(A, B, C, D); Console.WriteLine("Вид четырехугольника: " + quadrilateralType); } }
Python
import math class Point: def __init__(self, x, y): self.x = x self.y = y def distance(p1, p2): return math.sqrt((p1.x - p2.x) ** 2 + (p1.y - p2.y) ** 2) def determine_quadrilateral_type(A, B, C, D): AB = distance(A, B) BC = distance(B, C) CD = distance(C, D) DA = distance(D, A) diagonal_AC = distance(A, C) diagonal_BD = distance(B, D) if AB == BC == CD == DA: return "Квадрат" elif AB == CD and BC == DA: return "Прямоугольник" elif AB == BC == CD == DA and diagonal_AC == diagonal_BD: return "Ромб" else: return "Произвольный четырехугольник" # Введите координаты вершин A = Point(float(input("Введите координаты вершины A (x y): ").split())) B = Point(float(input("Введите координаты вершины B (x y): ").split())) C = Point(float(input("Введите координаты вершины C (x y): ").split())) D = Point(float(input("Введите координаты вершины D (x y): ").split())) quadrilateral_type = determine_quadrilateral_type(A, B, C, D) print(f"Вид четырехугольника: {quadrilateral_type}")
Программа предполагает, что введенные координаты образуют четырехугольник, и не производит проверку на действительность фигуры.
Java
import java.util.Scanner; class Point { double x, y; public Point(double x, double y) { this.x = x; this.y = y; } } public class QuadrilateralTypeDeterminer { public static double distance(Point p1, Point p2) { double dx = p1.x - p2.x; double dy = p1.y - p2.y; return Math.sqrt(dx * dx + dy * dy); } public static String determineQuadrilateralType(Point A, Point B, Point C, Point D) { double AB = distance(A, B); double BC = distance(B, C); double CD = distance(C, D); double DA = distance(D, A); double diagonalAC = distance(A, C); double diagonalBD = distance(B, D); if (AB == BC && BC == CD && CD == DA) { return "Квадрат"; } else if (AB == CD && BC == DA) { return "Прямоугольник"; } else if (AB == BC && CD == DA && diagonalAC == diagonalBD) { return "Ромб"; } else { return "Произвольный четырехугольник"; } } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Введите координаты вершины A (x y): "); double ax = scanner.nextDouble(); double ay = scanner.nextDouble(); Point A = new Point(ax, ay); System.out.print("Введите координаты вершины B (x y): "); double bx = scanner.nextDouble(); double by = scanner.nextDouble(); Point B = new Point(bx, by); System.out.print("Введите координаты вершины C (x y): "); double cx = scanner.nextDouble(); double cy = scanner.nextDouble(); Point C = new Point(cx, cy); System.out.print("Введите координаты вершины D (x y): "); double dx = scanner.nextDouble(); double dy = scanner.nextDouble(); Point D = new Point(dx, dy); String quadrilateralType = determineQuadrilateralType(A, B, C, D); System.out.println("Вид четырехугольника: " + quadrilateralType); } }
Pascal
program QuadrilateralTypeDeterminer; uses SysUtils, Math; type Point = record x, y: Double; end; function Distance(p1, p2: Point): Double; begin Result := Sqrt(Sqr(p1.x - p2.x) + Sqr(p1.y - p2.y)); end; function DetermineQuadrilateralType(A, B, C, D: Point): String; var AB, BC, CD, DA, diagonalAC, diagonalBD: Double; begin AB := Distance(A, B); BC := Distance(B, C); CD := Distance(C, D); DA := Distance(D, A); diagonalAC := Distance(A, C); diagonalBD := Distance(B, D); if (AB = BC) and (BC = CD) and (CD = DA) then Result := 'Квадрат' else if (AB = CD) and (BC = DA) then Result := 'Прямоугольник' else if (AB = BC) and (CD = DA) and (diagonalAC = diagonalBD) then Result := 'Ромб' else Result := 'Произвольный четырехугольник'; end; var A, B, C, D: Point; quadrilateralType: String; begin Write('Введите координаты вершины A (x y): '); ReadLn(A.x, A.y); Write('Введите координаты вершины B (x y): '); ReadLn(B.x, B.y); Write('Введите координаты вершины C (x y): '); ReadLn(C.x, C.y); Write('Введите координаты вершины D (x y): '); ReadLn(D.x, D.y); quadrilateralType := DetermineQuadrilateralType(A, B, C, D); WriteLn('Вид четырехугольника: ', quadrilateralType); end.
JavaScript
function calculateDistance(p1, p2) { return Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2)); } function determineQuadrilateralType(A, B, C, D) { const AB = calculateDistance(A, B); const BC = calculateDistance(B, C); const CD = calculateDistance(C, D); const DA = calculateDistance(D, A); const diagonalAC = calculateDistance(A, C); const diagonalBD = calculateDistance(B, D); if (AB === BC && BC === CD && CD === DA) { return "Квадрат"; } else if (AB === CD && BC === DA) { return "Прямоугольник"; } else if (AB === BC && CD === DA && diagonalAC === diagonalBD) { return "Ромб"; } else { return "Произвольный четырехугольник"; } } const readline = require('readline'); const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); rl.question("Введите координаты вершины A (x y): ", function (coordinatesA) { const [ax, ay] = coordinatesA.split(' ').map(Number); rl.question("Введите координаты вершины B (x y): ", function (coordinatesB) { const [bx, by] = coordinatesB.split(' ').map(Number); rl.question("Введите координаты вершины C (x y): ", function (coordinatesC) { const [cx, cy] = coordinatesC.split(' ').map(Number); rl.question("Введите координаты вершины D (x y): ", function (coordinatesD) { const [dx, dy] = coordinatesD.split(' ').map(Number); const A = { x: ax, y: ay }; const B = { x: bx, y: by }; const C = { x: cx, y: cy }; const D = { x: dx, y: dy }; const quadrilateralType = determineQuadrilateralType(A, B, C, D); console.log("Вид четырехугольника: " + quadrilateralType); rl.close(); }); }); }); });
PHP
<?php function calculateDistance($p1, $p2) { return sqrt(pow($p1['x'] - $p2['x'], 2) + pow($p1['y'] - $p2['y'], 2)); } function determineQuadrilateralType($A, $B, $C, $D) { $AB = calculateDistance($A, $B); $BC = calculateDistance($B, $C); $CD = calculateDistance($C, $D); $DA = calculateDistance($D, $A); $diagonalAC = calculateDistance($A, $C); $diagonalBD = calculateDistance($B, $D); if ($AB == $BC && $BC == $CD && $CD == $DA) { return "Квадрат"; } elseif ($AB == $CD && $BC == $DA) { return "Прямоугольник"; } elseif ($AB == $BC && $CD == $DA && $diagonalAC == $diagonalBD) { return "Ромб"; } else { return "Произвольный четырехугольник"; } } $A = ['x' => 0, 'y' => 0]; // Замените координаты вершины A $B = ['x' => 0, 'y' => 4]; // Замените координаты вершины B $C = ['x' => 3, 'y' => 4]; // Замените координаты вершины C $D = ['x' => 3, 'y' => 0]; // Замените координаты вершины D $quadrilateralType = determineQuadrilateralType($A, $B, $C, $D); echo "Вид четырехугольника: " . $quadrilateralType; ?>
Эта программа позволяет вам определить вид четырехугольника, используя заданные координаты вершин A, B, C и D. Примечание: программа предполагает, что введенные координаты образуют четырехугольник, и не выполняет проверку на действительность фигуры. Вы можете заменить координаты вершин на необходимые для вашего случая.