Площадь выпуклого многоугольника - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Площадь выпуклого многоугольника. Даны натуральное число n, действительные числа x1, y1, x2, y2,..., xn, yn. Найти площадь выпуклого n-угольника, вершины которого при некотором последовательном обходе имеют координаты (x1, y1), (x2, y2), ..., (xn, yn). Определить подпрограмму вычисления площади треугольника по координатам его вершин. Площадь многоугольника хочу найти через суммы площадей треугольников. Начал делать, а дальше застопорилось, никак не пойму что дальше. Как я понял нужно из массива брать координаты.
#include <stdio.h>
#include <math.h>
float lin (float x1; float y1; float x2; float y2)
     {return sqrt (pow((x2-x1),2)+pow((y2-y1),2));
     }
float strg (float x1; float y1; float x2; float y2; float x3; float y3)
{float a,b,c,p;
a=lin (x1,y1,x2,y2);
b=lin (x2,y2,x3,y3);
c=lin (x1,y1,x3,y3);
p=(a+b+c)/2;
return sqrt (p*(p-a)*(p-b)*(p-c);
//здесь не понятно, что писать
}
float mas [100][2];
void main ()
{float ...

Решение задачи: «Площадь выпуклого многоугольника»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
typedef struct{
    float x, y;
} Point2f;
 
float distance2f(Point2f*, Point2f*);
float triangleSqare2f(Point2f*, Point2f*, Point2f*);
float polygonSquare2fv(Point2f*, int);
 
int main(int argc, char** argv) {
    srand(time(0));
 
    int i, n;
    printf("Enter n: "); scanf("%d", &n);
    
    Point2f* polygon = (Point2f*)calloc(n, sizeof(Point2f));
    
    for(i = 0; i < n; i++){
        printf("Point %d.x: ", i + 1); scanf("%f", &polygon[i].x);
        printf("Point %d.y: ", i + 1); scanf("%f", &polygon[i].y);
    }
    
    printf("Polygon square: %f\n", polygonSquare2fv(polygon, n));
    
    free(polygon);
    return 0;
}
 
float distance2f(Point2f* p1, Point2f* p2){
    return sqrtf(pow(p1->x - p2->x, 2) + pow(p1->y - p2->y, 2));
}
 
float triangleSqare2f(Point2f* p1, Point2f* p2, Point2f* p3){
    float
        a = distance2f(p1, p2),
        b = distance2f(p2, p3),
        c = distance2f(p3, p1);
    float p = (a + b + c) / 2.0;
    
    return sqrtf(p*(p - a) * (p - b) * (p - c));
}
 
float polygonSquare2fv(Point2f* points, int n){
    float square = 0.0;
    int i;
    for(i = 1; i < n - 1; i++)
        square += triangleSqare2f(points + 0, points + i, points + i + 1);
    
    return square;
}

Объяснение кода листинга программы

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

  1. Включаются необходимые заголовочные файлы.
  2. Определяется структура Point2f для представления точек в двумерном пространстве.
  3. Определяются функции для вычисления расстояния между двумя точками и площади треугольника, используя формулы из математики.
  4. В функции main() создается точка n, которая представляет количество вершин многоугольника.
  5. Пользователю предлагается ввести координаты вершин многоугольника.
  6. Вычисляется площадь многоугольника, используя функцию polygonSquare2fv().
  7. Выводится результат.
  8. Все выделенные динамические памяти освобождаются.
  9. Функция main() возвращает 0, что означает успешное завершение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5
Похожие ответы