Obliczanie pola wielokąta wypukłego

0

Hej wszystkim, muszę obliczyć pole oraz obwód wielokąta wypukłego
Napisałem taki kod lecz nie działa on poprawnie, mogę prosić o pomoc ?

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

double polew(double x[], double y[], int n)
{
    double pole = 0.0;
    int j = n - 1;
    for (int i = 0; i < n; i++)
    {
        pole += (x[j] + x[i]) * (y[j] - y[i]);
        j = i;
    }
    return abs(pole / 2.0);
}
double obwod(double x[], double y[], int n)
{
    double obwod = 0.0;
    int j = n - 1;
    for (int i = 0; i < n; i++)
    {
        obwod += ((x[j] - x[i]) + (y[j] - y[i]));
        j = i;
    }
    return abs(obwod / 2.0);
}
int main()
{
    int N,i;
    double x[10];
    double y[10];
    cin >> N;

    for(i=0;i<N;i++)
    {
        cin >> x[i]>>y[i];
    }
     N = sizeof(x) / sizeof(y[0]);
    cout << "Pole wielokata wynosi: " <<showpoint << setprecision(3)<< polew(x, y, N) << endl;
    cout << "Obwod wielokata wynosi: "<< obwod(x, y, N);
    return 0;
}
2

No bo wzór na pole trójkąta wygląda inaczej.
niby co to ma być (od strony matematycznej):

pole += (x[j] + x[i]) * (y[j] - y[i]);

Obwód jeśt źle

obwod += ((x[j] - x[i]) + (y[j] - y[i]));

Powinno być:

obwod += std::sqrt((x[j] - x[i])*(x[j] - x[i]) + (y[j] - y[i])* (y[j] - y[i]));
1

A co według ciebie ma robić ta linia:

N = sizeof(x) / sizeof(y[0]);

https://wandbox.org/permlink/KAQoREO90lkhuf1R

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0