Program Tworzacy z punktow wspolrzednych xy trojkaty wpisane w sobie

0

Witam
Proszę o waszą pomoc, gdyż na zaliczenie przedmiotu musze stworzyc program skomplikowany w jezyku C a biorąc pod uwage moje umiejetnosci jest bardzo fatalnie;/

Moze ktos sie juz wczesniej z takim algorytmem liczenia trojkatow juz spotkal albo ma pomysl jak to rozwiazac wiec piszcie :)

Program musi prosic o wspołrzedne 3 trójkatów czyli 9 punktów ( x,y) i po wpisaniu ich, musi te punkty tak połaczyc aby powstałą konstrukcja 3 wpisanych w siebie trójkatów lecz nie przecinajacych sie ze soba i itp oraz wypluc dane 1. Trójkat (najwiekszy) XY XY XY (punkty ) i tak mniejszy i najmniejszy

Z góry ogromne dziękuje za wszelaki czas poświecony :)

0

Język polski też jest dla Ciebie zbyt skomplikowany. Opisz problem jeszcze raz, od nowa i zrozumiale.

0

Bogdans
No dobra masz racje, poprawnie to nie bylo napisane, ( lawirowałem miedzy PC a kuchnia)
Program muszę napisac w jezyku C
1.Prosi o wprowadzenie danych wejsciowych ( czyli 9 punktów współrzędnych X1Y1 X2Y2 itp )
2. Z tych punktów program musi wybrac taki wariant aby utworzyc trójkąty wpisane w siebie ( nie moga sie przecinac ani boki sie nachodzic )
3. Program podaje wariant wpisanych trójkątów w nastepujacy sposob 1.Trójkat (najwiekszy) podaje współrzędne pkt 2.Trójkat ( mniejszy ) i jego współrzędne 3. Trójkat (najmniejszy) i jego współrzędne

mam nadzieje ze teraz to juz z wiekszym ładem napisalem

1

Na pewno chodzi Ci o trójkąty wpisane, czy może raczej o zawierające się? Zgodnie z definicją trójkąt T1 jest wpisany w trójkąt T2 jeżeli każdy wierzchołek trójkąta T1 leży na bokach trójkąta T2.

1

Jeżeli chodzi ci o trójkąty zawierające, to można to rozwiązać np. przez sprawdzanie czy któraś z trójek punktów po połączeniu w trójkąt zwiera pozostałe 6.
Jeżeli tak, to sprawdzamy dalej, czy z tych 6-ciu punktów któreś trzy zawierają pozostałe. Jeżeli nie da się znaleźć takich trójek, to trójkąty nie zawierają się.

Sprawdzenie czy punkt leży wewnątrz trójkąta można napisać wykorzystując równania matematyczne: http://www.math.us.edu.pl/pgladki/faq/node105.html

0

Panowie chodzi o zawierające, macie racje ;) czyli trzeba najpierw stworzyc procedure gdzie program polaczy punkty w pierwszy najwiekszy trójkat (( czyli o najwiekszym polu figury ) Jakies sugestie )? a potem szukał z tych zależności matematycznych ?

0

Od razu można wykorzystywać równania które podałem.
Pierwszym krokiem może być sprawdzenie czy uda się znaleźć trzy punkty które zwierają pozostałe sześć.
Jeżeli nie, to dalej nie ma potrzeby sprawdzać ponieważ trójkąty będą się przecinać.

Algorytm może wyglądać w ten sposób:

  1. Dla wszystkich kombinacji bez powtórzeń sprawdź czy są takie 3 punkty z które zawierają pozostałe 6 (używając wzorów z powyższego postu)
    1.a. Jeżeli są takie 3 punkty, to idź do kroku 2, jeżeli nie to wypisz że trójkąty się przecinają.
  2. Dla 6-ciu pozostałych punktów sprawdź czy są takie 3 punkty z które zawierają pozostałe 3 (używając wzorów z powyższego postu)
    2.a. Jeżeli są takie 3 punkty, to idź do kroku 3, jeżeli nie to wypisz że trójkąty się przecinają.
  3. Wypisz wynik.
1

Dla trójkątów podanych jako punkty da się wyprowadzić prostsze równania:
Czy P=(Px,Py) leży wewnątrz trójkąta A,B,C:

s1=(Ax-Px)*(By-Py)-(Bx-Px)*(Ay-Py)
s2=(Bx-Px)*(Cy-Py)-(Cx-Px)*(By-Py)
s3=(Cx-Px)*(Ay-Py)-(Ax-Px)*(Cy-Py)
if(((s1<=0)&&(s2<=0)&&(s3<=0))||((s1>=0)&&(s2>=0)&&(s3>=0))) // P - leży wewnątrz
1

Luźna (tzn. nie do końca przemyślana) propozycja. Wyznaczamy cztery punkty skrajne: lewy, prawy, górny i dolny. Jeśli otrzymamy cztery różne punkty, to nie ma rozwiązania, jeśli tylko trzy różne, to wyznaczają one największy trójkąt,. Itd...

0

czyli panowie ktore z matematycznego podejscia jest najlepsze ?

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