Zakładamy, że mamy dane trzy punkty A = (xA, yA), B = (xB, yB), C = (xC, yC). Zadanie polega na sprawdzeniu czy istnieje prosta, która zawiera wszystkie podane punkty. Podany problem można rozwiązać na dwa sposoby.
Funkcja wspoliniowePunkty() wczyta od użytkownika trzy pary liczb x, y, a następnie zwróci wartość logiczną czy wczytane punkty należą do tej samej prostej.
Załóżmy, że wszystkie punkty leżą na jednej prostej. Wtedy istnieją takie parametry a i b, że podłożone we wzorze f(x) = ax + b pozwolą na wyprowadzenie wszystkich współrzędnych x, y podanych trzech punktów.
Algorytm zbiega się do wyliczenia dwóch parametrów prostych. Jeden dotyczy prostej przechodzącej przez punkt A i B, a drugi prostej przechodzącej przez A i C. Jeśli obie wartości są identyczne to punkty leżą na tej samej prostej. W celu wyliczenia parametru a należy rozwiązać następujący układ:
Kod realizujący to zadanie:
(2.) Przygotuj zmienne i (3.) wczytaj dane. (4.) Na podstawie wczytanych danych wyliczane są dwa parametry a dwóch prostych i sprawdza czy są identyczne.
Na podstawie rozwiązywanego układu można utworzyć macierz, której wyznacznik musi być równy 0, aby miała nieskończenie wiele rozwiązań, a co za tym idzie - współliniowość wszystkich trzech punktów.
Kod realizujący to zadanie wykorzystuje bibliotekę matrix.h, która jest rozwijana w ramach serwisu i zawiera podstawowe funkcje do między innymi tworzenia, wczytywania i usuwania macierzy.
(2.) Utwórz macierz i (3.) przygotuj zmienne do wczytywania danych. (4.) Rozpocznij wczytywanie trzech punktów: (5.) wczytaj pozycję i (6. - 8.) na tej podstawie uzupełnij kolejny pusty wiersz macierzy. Następnie (9.) wylicz wyznacznik macierzy i (10.) usuń macierz. (11.) Wynikiem zgodnie z teorią jest porównanie wyznacznika do 0.
W celu przetestowania funkcji można skorzystać z poniższej funkcji, która interpretuje zwrócony przez napisaną funkcję wynik. Należy pamiętać, że mogą pojawić się problemy z dokładnością obliczeń co oznacza, że program może zwracać nieprawidłowy wynik, ale kroki algorytmów są w pełni poprawne.
Na podstawie implementacji polegającej na parametrze a napisz funkcję podajRownanieProstej(), która pod warunkiem, że punkty leżą na jednej prostej, wypisze równanie tej prostej w postaci kierunkowej y = ax + b. Funkcja powinna wczytywać dane od użytkownika. Przykładowo dla danych:
Program powinien wypisać na ekran:
Na podstawie sprawdzania przy pomocy macierzy napisz funkcję wspoliniowePunkty, która wczyta liczbę n, a następnie n punktów i sprawdzi czy wszystkie punkty leżą na jednej prostej. Przykładowo dla wejścia:
Program powinien wypisać na ekran: