Struktura odcinka na podstawie struktury punktu

0

Mam taki kod:

#include <iostream>

using namespace std;

struct Punkt {
int x;
int y;
};

struct Linia {
Punkt A, B;
}; 

To struct Linia domyślam się że jest źle, dlatego bardzo proszę o pomoc, wskazówkę jak to zrobić lub jakiś link gdyż sam nie mogę znaleźć.

1

Dlaczego źle? Wygląda ok.

0

A to w takim razie podeśle cały kod.
I tak: Muszę sprawdzić, czy dwie proste są prostopadłe, jeśli tak to zwracam 1, a jeśli nie to 0. Może mi ktoś podpowiedzieć jak to teraz zrobić za pomocą tej struktury Linia?

 
#include <iostream>
#include <cmath>

using namespace std;

struct Punkt
{
    int x;
    int y;
};

struct Linia
{
    Punkt A, B;
};

double dwie_linie (Punkt a, Punkt b, Punkt c, Punkt d)
{
    double dlugosc1, dlugosc2, skalarny, alfa;
    dlugosc1 = sqrt (pow(b.x-a.x,2)+pow(b.y-a.y,2));
    dlugosc2 = sqrt (pow(d.x-c.x,2)+pow(d.y-c.y,2));
    alfa = (((b.x-a.x)*(d.x-c.x) + (b.y-a.y) * (d.y-c.y)) / dlugosc1 * dlugosc2);
    if (dlugosc1 * dlugosc2 == 0)
    {
        cout << "Podaj inne wspolrzedne";
    }
    skalarny = dlugosc1 * dlugosc2 * cos(alfa);

    if (skalarny == 0)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

int main()
{
    Punkt a,b,c,d;
    Linia i,j;
    cout << "Podaj wspolrzedne punktow a,b,c,d (x i y): ";
    cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y >> d.x >>d.y;
    cout << dwie_linie(a,b,c,d);



    return 0;
}

0
int dwie_linie(const Linia &p,const Linia &q)
  {
   ...
   double len1=hypot(p.B.x-p.A.x,p.B.y-p.A.y),len2=hypot(q.B.x-q.A.x,q.B.y-q.A.y);
   if((!len1)||(!len2)) return -1;
   ...
   ...
   return !skalarny;
  }
...
    Linia p,q;
    cout<<"Podaj wspolrzedne punktow a,b,c,d (x i y): ";
    cin>>p.A.x>>p.A.y>>p.B.x>>p.B.y>>q.A.x>>q.A.y>>q.B.x>>q.B.y;
    cout<<dwie_linie(p,q);

Z tym że wyniki masz niepoprawnie zapisane równanie.

0

A może ktoś pomóc w poprawie równania?

0

A sam nie możesz?
Radzę zmienić podejście, sprawdź czy: fabs(DeltaX(p)*DeltaY(q))==fabs(DeltaY(p)*DeltaX(q))
Oczywiście pod warunkiem: (DeltaX(p)||DeltaY(p))&&(DeltaX(q)||DeltaY(q))

0
_13th_Dragon napisał(a):

A sam nie możesz?
Radzę zmienić podejście

Nie o to chodzi że nie mogę, ale o to że nie wiedziałem gdzie jest błąd.

0

Zdefiniowałeś odcinek, a nie prostą...
Dlaczego nie sprawdzisz po prostu współczynnika kierunkowego?

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