dwa prostokąty
dwa prostokąty
Zadanie zaczerpnięte z pl.spoj.pl(nie, jego rozwiązanie nie jest nic warte ).
Dane są dwa prostokąty na płaszczyźnie. Czy drugi można tak ustawić, aby zmieścił się w pierwszym(nie stykając się z nim)?
Mamy dane długości boków obu prostokątów.
Uploaded with
W wyniku serii niefortunnych obliczeń wyszedł mi następujący wielomian:
\(\displaystyle{ (1+ \frac{a^{2}}{b^{2}} )e^{2} - 4ae + a^{2} + b^{2} - c^{2}}\)
Następnie wyliczam sobie e(a tym samym i e') i sprawdzam czy długość boku "c" drugiego prostokąta nie przekracza ram wyznaczonych przez Pitagorasa.
Gdzie popełniam błąd?
Z góry dziękuję za wszelkie przejawy zainteresowania tym problemem ;d.
Dane są dwa prostokąty na płaszczyźnie. Czy drugi można tak ustawić, aby zmieścił się w pierwszym(nie stykając się z nim)?
Mamy dane długości boków obu prostokątów.
Uploaded with
W wyniku serii niefortunnych obliczeń wyszedł mi następujący wielomian:
\(\displaystyle{ (1+ \frac{a^{2}}{b^{2}} )e^{2} - 4ae + a^{2} + b^{2} - c^{2}}\)
Następnie wyliczam sobie e(a tym samym i e') i sprawdzam czy długość boku "c" drugiego prostokąta nie przekracza ram wyznaczonych przez Pitagorasa.
Gdzie popełniam błąd?
Z góry dziękuję za wszelkie przejawy zainteresowania tym problemem ;d.
-
- Użytkownik
- Posty: 22
- Rejestracja: 10 sie 2010, o 00:57
- Płeć: Mężczyzna
- Lokalizacja: Poznań
- Pomógł: 1 raz
dwa prostokąty
Słuszna koncepcja (z tym obliczaniem e i e') ale ten wielomian jest niepotrzebny. Ułóż sobie warunki, takie jak: porównywanie odpowiednich boków prostokątów, porównanie przekątnych prostokątów itp. aż dojdziesz do momentu w którym z twierdzenia pitagorasa obliczysz e i e'. Następnie obliczysz maksylaną przeciwprostokątna powstałą na bazie e i e', którą porównasz z bokiem c i to sio. Jeśli nie wyraziłem się klarownie i przejrzyście, to przepraszam. Ewentualnie mogę wkleić kod swojego programu.
dwa prostokąty
Wybacz, nie wspomniałem. Porównywanie boków trójkątów oczywiście zachodzi dużo wcześniej, dopiero później próbuję upchać drugi prostokąt po przekątnej .
Obliczenie maksymalnego możliwego boku c, w oparciu o e i e' to oczywiście już nie problem. Jedyny problem na jaki natrafiłem to obliczenie e(a tym samym i e') - staram się tu wykorzystać podobieństwo trójkątów - z tej idei narodził się wspomniany wielomian.
Niestety nie wiem jak inaczej policzyć e. Za wszelką pomoc(łącznie z fragmentami kodu) serdeczne Bóg zapłać .
Obliczenie maksymalnego możliwego boku c, w oparciu o e i e' to oczywiście już nie problem. Jedyny problem na jaki natrafiłem to obliczenie e(a tym samym i e') - staram się tu wykorzystać podobieństwo trójkątów - z tej idei narodził się wspomniany wielomian.
Niestety nie wiem jak inaczej policzyć e. Za wszelką pomoc(łącznie z fragmentami kodu) serdeczne Bóg zapłać .
-
- Użytkownik
- Posty: 22
- Rejestracja: 10 sie 2010, o 00:57
- Płeć: Mężczyzna
- Lokalizacja: Poznań
- Pomógł: 1 raz
dwa prostokąty
narysowałbym schematyczny rysunek ale mi się nie chce, więc wkleje fragment kodu, który mam nadzieję Ci się przyda:
Wybacz, że inne oznaczenia zmiennych.
Kod: Zaznacz cały
//tutaj główne warunki...
if (Y < B)
//jeśli przekątna mniejszego prostokąta jest mniejsza od B
cout<<"TAK"<<endl;
else
if (Y > X)
//jeśli przekątna mniejszego prostokąta jest większa od przekątnej większego prostokąta
cout<<"NIE"<<endl;
else//jesli nie jest większa
{
//przyprostokątna leżąca na boku A
W=sqrt(Y*Y - B*B);
//pierwsza przyprostokątna malutkiego trójkąta
L = (A-W)/2;
//przyprostokątna leżąca na boku B
Z = sqrt(Y*Y-A*A);
//druga przyprostokątna malutkiego trójkąta
K=(B-Z)/2;
//przeciwprostokątna malutkiego trójkąta
DMax = sqrt(L * L + K * K);
/* jeśli dł. krótszego boku drugiego prostokąta jest większa, bądź równa przeciwprostokątnej malutkiego trójkąta */
if (D >= DMax)
cout<<"NIE"<<endl;
else // jeśli jest mniejsza
cout<<"TAK"<<endl;
}
//tutaj zamykanie odpowiednich modułów i zwrócenie zera
dwa prostokąty
Początkowo przedstawiony kod nie działał dla mnie poprawnie(podejrzewałem "główne warunki"). Jak się okazało słusznie .
Do głównych warunków dodałem jeden którego nie miałem
I od razu zaakceptowany .
Dziękuję za pomoc i pozdrawiam!
Do głównych warunków dodałem jeden którego nie miałem
Kod: Zaznacz cały
if((ldouble)a/b < (ldouble)c/d){
std::cout<<"NIE"<<std::endl;
continue;
}
Dziękuję za pomoc i pozdrawiam!
-
- Użytkownik
- Posty: 22
- Rejestracja: 10 sie 2010, o 00:57
- Płeć: Mężczyzna
- Lokalizacja: Poznań
- Pomógł: 1 raz
dwa prostokąty
Nie ma za co. Huh, ja mam więcej "głównych" warunków Z czystej ciekawości jaki czas wykonywalny programu uzyskałeś?
dwa prostokąty
Głównych warunków oczywiście jest więcej . Podałem ten którego brakowało. Po oczyszczeniu kodu uzyskałem 0.04s.
-
- Użytkownik
- Posty: 22
- Rejestracja: 10 sie 2010, o 00:57
- Płeć: Mężczyzna
- Lokalizacja: Poznań
- Pomógł: 1 raz
dwa prostokąty
O ja...w takim wypadku chyba muszę poszukac informacji o skracaniu kodu, bo mój aktualny czas to wstyd