[C] Układy równań 3282 8

O temacie

Autor Anonymized

Zaczęty 2.02.2014 roku

Wyświetleń 3282

Odpowiedzi 8

Anonymized

Anonymized

Użytkownicy
posty2957
Propsy6115
NagrodyV
Profesjabrak
  • Użytkownicy
Tutaj potrzebuję małej pomocy. Ćwiczę sobie programowanie i stanęło przede mną takie zadanie:
Cytuj
Napisz program, ktory pobierze od uzytkownika 6 liczb zmiennoprzecinkowych bedacych wspolrzednymi x,y trzech punktow na plaszczyznie. jezeli leza one na jednej proste, program powinien wyswietlic wspolczynniki a,b rowniania tej prostej w postaci y=ax+b. w przeciwnym razie program powinien wyswietlic komunikat 'niewspolliniowe. Zadne dwa punkty nie maja rownej wspolrzednej X.
Nie bardzo wiem w jaki sposób zmusić program do liczenia układów równań.
Jest to prawdopodobnie proste do napisania, także jeżeli ktoś się pokusi o napisanie programu i okomentowanie go, jeśli uznacie, że się to przyda - to nie pogardzę.
Na pomoc mam to: http://matematyka.pisz.pl/strona/2510.html

Mamy do dyspozycji tylko stdio.h
 

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Przecież to jest podstawówkowa geometria, dodawanie, odejmowanie, mnożenie i dzielenie ;p

Liczysz różnicę współrzędnej Y dla dwóch pierwszych punktów. Dzielisz ją przez różnicę współrzędnych X dla tych punktów (dostajesz nachylenie linii między nimi). Mnożysz tą liczbę przez różnicę X między drugim a trzecim punktem i dodajesz współrzędną Y drugiego punktu. Sprawdzasz czy to co ci wyszło to współrzędna Y trzeciego punktu. Jeśli tak, to te trzy punkty są współliniowe, jeśli nie - nie są. Musisz dodatkowo załatwić obsługę współrzędnych ujemnych - najprostsze rozwiązanie to przesunięcie współrzędnych na osi o tyle ile wynosi najniższa użyta na niej współrzędna ujemna. Wtedy wszystko zrobi się dodatnie i nie będziesz musiał potem w kodzie rozpatrywać mnóstwa przypadków. Aha, moja instrukcja zakłada też że punkty są posortowane tak że współrzędna X jest rosnąca - musisz dodać jeszcze to sortowanie.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Jest prostszy sposób mianowicie zastosowanie tych 2 wzorów

Współczynnik A:
a =  (Y0 -  Y1) / (X0 - X1);

Współczynnik B:
b =  Y0  -  X0  *  a;

jest to wyprowadzone właśnie z układu równań :)

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator
Nie podałeś co oznaczają zmienne A, B, Y0, Y1, X0, X1 (i jakie masz w związku z tym ewentualne założenia początkowe). Wydaje mi się że z matematycznego punktu widzenia jest to dokładnie to samo, tylko ja rozpisałem wszystko krok po kroku.

RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy

RafalBudzis

[C] Układy równań
#4 2014-02-02, 15:31(Ostatnia zmiana: 2014-02-02, 15:41)
A i B to współczynniki funkcji liniowej y = ax + b więc obliczamy A i B

X0 i Y0 - współrzędne 1 punku
X1 i Y1 - współrzędne 2 punktu

Po obliczeniu A i B sprawdzamy czy punkt 3 należy do naszej funkcji liniowej

if(Y2 == (A * X2) + B)

A i B już obliczyliśmy wyciągnąłem to tak

mam układ równań funkcji liniowej dla 2 punktów
aX0 + b = Y0
aX1 + b = Y1

aX0 + b = Y0
aX1 + b = Y1 / * -1

aX0 + b = Y0
-aX1 - b = - Y1

no i teraz dodajemy b się skrócą zostanie

aX0 - aX1 = Y0 - Y1

wyciągamy a przed nawias

a (X0 - X1) = Y0 - Y1

dzielimy obustronnie przez (X0 - X1) i wychodzi
a =  (Y0 -  Y1) / (X0 - X1);


RafalBudzis

RafalBudzis

Użytkownicy
posty1967
Propsy808
ProfesjaSkrypter
  • Użytkownicy
Też wszystko działa bo obliczamy wzór funkcji liniowej więc tworzymy z 2 dowolnych punktów CAŁĄ linie a potem sprawdzamy czy punkt 3 znajduje się w tej lini.


Anonymized

Anonymized

Użytkownicy
posty2957
Propsy6115
NagrodyV
Profesjabrak
  • Użytkownicy
Dziękuję :D Miałem takie zadanie na pierwszym kolokwium, uzbrojony jedynie w kartkę i długopis - nie podołałem temu zadaniu, bo konieczność użycia własnych obliczeń złamała moje morale :lol2:
 


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry