Obliczanie pola i obwodu trapezu

0

Witam potrzebuje obliczyć pole i obwód trapezu. Program na zaliczenie.

Jestem początkujący więc proszę o wyrozumiałość :)
Poniżej wklejam kod który udało mi się napisać:)

Wiem że nie powinienem stosować tu int ale to dopiero zarys programu później będzie wczytywanie z pliku i sprawdzanie czy wgl te współrzędne tworzą trapez. Ale napisałem taki uproszczony program żeby zobaczyć z czym sobie nie poradzę :P

Na razie współrzędne wbudowane są w program później będą wczytywane z pliku w kolejności A, B, C, D i będą wymyślone przez wykładowce w celu sprawdzenia różnych zależności, więc proszę nie sugerować się tymi współrzędnymi mogą być one inne więc potrzebuje uniwersalnych rozwiązań:)

A więc teraz pytania :)

  1. Długości poszczególnych odcinków policzyłem ale odcinek BC wychodzi mi 7 a powinno 4. Liczyłem to ze wzoru http://www.bazywiedzy.com/wzor-na-dlugosc-odcinka.phpniby rzeczywiście wychodzi 7 ale dlaczego ? :)

  2. Musze sprawdzić czy współrzędne tworzą trapez co oznacza że musi mieć przynajmniej jedną parę boków równoległych znalazłem dobry wzór na tej stronie http://www.matematyka.pl/32598.htm tylko mam pytanie czy muszę to sprawdzać tylko dla AB i CD?

  3. Czy macie jakieś podpowiedzi przy tworzeniu programu? Jakie mogą spotkać mnie problemy? Jakieś zależności?

  4. No i najgorszy problem jak obliczyć wysokość trapezu. Powinienem obliczyć odległość między dwiema prostymi AB i CD ale nie mogę tego przełożyć na kod do swojego programu.


#include <iostream>
#include <math.h>
#include <cstdlib>
#include <conio.h>
using namespace std;
int main()
{
    int pole;
    int ab,bc,cd,da;   
    int A[1][2];
    int B[1][2];
    int C[1][2];
    int D[1][2];
    A[0][0] = 0;
    A[0][1] = 0;
    B[0][0] = 0;
    B[0][1] = 8;
    C[0][0] = 6;
    C[0][1] = 4;
    D[0][0] = 2;
    D[0][1] = 4;

    cout << "Wspolrzedne A: "<<A[0][0]<<" "<<A[0][1]<<endl;
    cout << "Wspolrzedne B: "<<B[0][0]<<" "<<B[0][1]<<endl;
    cout << "Wspolrzedne C: "<<C[0][0]<<" "<<C[0][1]<<endl;
    cout << "Wspolrzedne D: "<<D[0][0]<<" "<<D[0][1]<<endl;

    ab=sqrt( pow( (B[0][0]-A[0][0]), 2 ) + pow( (B[0][1]-A[0][1]), 2 ) );
    bc=sqrt( pow( (C[0][0]-B[0][0]), 2 ) + pow( (C[0][1]-B[0][1]), 2 ) );
    cd=sqrt( pow( (D[0][0]-C[0][0]), 2 ) + pow( (D[0][1]-C[0][1]), 2 ) );
    da=sqrt( pow( (A[0][0]-D[0][0]), 2 ) + pow( (A[0][1]-D[0][1]), 2 ) );

    cout << "Dlugosc AB: "<<ab<<endl;
    cout << "Dlugosc BC: "<<bc<<endl;
    cout << "Dlugosc CD: "<<cd<<endl;
    cout << "Dlugosc DA: "<<da<<endl;

    return 0;

}
0

ad 1. A wziąłeś pod uwagę że C[0][1] - B[0][1] to 4 - 8, co daje ci wynik ujemny? A Pitagoras raczej takich boków nie uwzględnił. Lepiej licz długości boków wcześniej, albo przynajmniej sprawdzaj która składowa większa.
ad 2 Nie, to nie starczy. Co jak AB będzie "ukośnym" odcinkiem trapezu? moim zdaniem trzeba też sprawdzić AC i BD.
ad 3 patrz 2 powyższe.
ad 4 np http://www.matematyka.pl/258918.htm naturalnie liczysz między tymi równoległymi
edit: zły dział.

edit co do 4, tutaj http://pl.wikipedia.org/wiki/Trapez masz wzór który nie wymaga wysokości do obliczenia pola trapezu. Do obwodu jest ci całkowicie zbędna

0

Pierwszy problem rozwiązany po prostu współrzędne przy B podałem odwrotnie 0,8 zamiast 8,0 tak już jest ok :) nie ma znaczenia czy tam wychodzi na minusie czy nie to nie liczone jest z Pitagorasa :) i podnoszone do potęgi jest więc wychodzi na plusie :)

Zaraz zastosuje ten wzór i zobaczę co i jak :)

Dzięki za szybką odpowiedź :)

0

A tak nie zauważyłem :) ale tak czy tak liczy mi wszystko dobrze :)
Jeszcze teraz zacząłem się zastanawiać co zrobić gdy w pliku współrzędne podane by były w innej kolejności nie A, B, C, D i trzeba by było posortować współrzędne ?

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