Klasa reprezentująca prostą na płaszczyźnie

0

witam,

mam napisać następującą klasę w C++:

Napisz klasę Prosta która będzie reprezentowała prostą na płaszczyźnie o równaniu ax + by = c oraz P – strukturę reprezentującą punkt (x,y) na tej płaszczyźnie.

Dla wykonania operacji nad prostymi należy zdefiniować odpowiednio konstruktory prostych i punktów oraz:
operator+ - do przesuwania prostej w poziomie,
operator* - do wyznaczania punktu przecięcia prostych,
operator<< - do drukowania punktu przecięcia (tj. obiektu typu P)
oraz inne niezbędne globalne lub składowe funkcje.

Napisać program testujący, który wyznacza i drukuje punkt przecięcia osi y-ów (prosta o równaniu x=0) z prostą przechodzącą przez punkty (0,3), (3,0) (prosta o równaniu x+y=3) przed i po jej przesunięciu w lewo o 1.5

Mam kilka zasadniczych pytan:

  1. Jak napisać tą klasę Prosta? W konstruktorze mają być argumenty a, b, c?
  2. Punkt przecięcia obliczę wg tych wzorów:

http://www.math.edu.pl/punkt-przeciecia-dwoch-prostych

zgadza się?

  1. Przesuwanie w poziomie można zrobić poprzez dodanie do x wartości argumentu operatora+. Ale we wzorach z powyższego linku współrzędna x nie bierze udziału w obliczeniach przy wyznaczaniu punktów wspólnych...
  2. Zakładając że prosta ma równanie Ax + By = C, a konstruktor prostej postać Prosta(a, b, c), to:
  • prostą o równaniu x = 0, zdefiniuję za pomocą konstruktora Prosta(1, 0, 0)?
  • prostą o równaniu x + y = 3, zdefiniuję za pomocą konstruktora Prosta(1, 1, -3) czy Prosta(1, 1, 3)?

Z góry wielkie dzięki za pomoc.

0
  1. Jak chcesz...
  2. TAK
  3. Słowa klucze - postać kanoniczna
  4. Jak chcesz...
0
cho3ek napisał(a):
  1. Słowa klucze - postać kanoniczna
  2. Jak chcesz...
  1. Postać kanoniczna przy funkcji liniowej? Nie rozumiem...
  2. Ale co wybrać w drugim przykładzie? -3 czy 3, bo w tym wzorze z linku jeśli C występuje jako samo po prawej stronie równania to jest ono ujemne, więc jak interpretować domyślnie wartość w konstruktorze - jako ujemną czy dodatnią?
0

Z tym C to jakieś dziwne pytanie. Jak użytkownika poda, że C ma być -3 to ma być -3, jak poda 3 to ma być 3. Ważne, żebyś ustalił jedną postać równania i żeby była wiadoma dla użytkownika, bo jak będzie mieć jakąś inną postać to musi sobie ją zamienić na tą używaną w programie (tutaj właśnie może nastąpić ta zamiana znaków, ale to nie Twoja sprawa, Ty ustalasz konkretną postać).

0

Tak postać kanoniczna funkcji liniowej.
http://matematyka.pisz.pl/strona/69.html
y=a(x-p)^2 + q
To "p" to jest właśnie przesunięcie w poziomie, a "q" w pionie.

0

Ojoj to o liniową chodziło... Coś mi się ubzdurało, że kwadratowej, sorry...

0

Zauważ, że jak chcesz przesunąć funkcję liniową w prawo, to jednocześnie przesuwasz ją w dół.
Czyli jak masz y=ax+b, to aby ją przesunąć w prawo o dwa punkty, to będzie y=ax+b-2

0
cho3ek napisał(a):

Zauważ, że jak chcesz przesunąć funkcję liniową w prawo, to jednocześnie przesuwasz ją w dół.
Czyli jak masz y=ax+b, to aby ją przesunąć w prawo o dwa punkty, to będzie y=ax+b-2

To jest prawda tylko dla a równego 1 bądź -1. A wyjątkowa nieprawda dla funkcji stałej.

Przesunięcie w poziomie o p i w pionie o q to funkcja f(x) = a(x + p) + (b + q)

0
herreler napisał(a):
  • prostą o równaniu x + y = 3, zdefiniuję za pomocą konstruktora Prosta(1, 1, -3) czy Prosta(1, 1, 3)?

Przecież to było w podstawówce. Skoro masz otrzymać coś w postaci Ax + By + C = 0 to jak będzie wyglądało wywołanie konstruktora?

Co do konstrukcji klasy to ja bym stworzył prywatny konstruktor i publiczne statyczne metody, które by konwertowały podane dane do ogólnej postaci. W ten sposób nie wymuszamy na programiście pamiętania i korzystania tylko z 1 formy, ale dajemy mu możliwość wyboru (mamy bardziej uniwersalne narzędzie).

Co do pkt. przecięcia to jest prosty układ równań liniowych z 2 niewiadomymi x i y, które są współrzędnymi przecięcia.

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