Wielokąty (n>3). Okręgi. Inne figury płaskie. Zadania i twierdzenia z nimi związane. Geometria rzutowa na płaszczyżnie.
-
lolwat
- Użytkownik

- Posty: 4
- Rejestracja: 23 sie 2010, o 14:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
Post
autor: lolwat » 23 sie 2010, o 15:12
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.
[img]http://img576.imageshack.us/img576/9965/lolbe.th.png[/img]
Uploaded with
ImageShack.us
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.
-
Satirev
- Użytkownik

- Posty: 22
- Rejestracja: 10 sie 2010, o 00:57
- Płeć: Mężczyzna
- Lokalizacja: Poznań
- Pomógł: 1 raz
Post
autor: Satirev » 23 sie 2010, o 16:53
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.
-
lolwat
- Użytkownik

- Posty: 4
- Rejestracja: 23 sie 2010, o 14:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
Post
autor: lolwat » 23 sie 2010, o 17:16
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ć

.
-
Satirev
- Użytkownik

- Posty: 22
- Rejestracja: 10 sie 2010, o 00:57
- Płeć: Mężczyzna
- Lokalizacja: Poznań
- Pomógł: 1 raz
Post
autor: Satirev » 23 sie 2010, o 17:26
narysowałbym schematyczny rysunek ale mi się nie chce, więc wkleje fragment kodu, który mam nadzieję Ci się przyda:
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
Wybacz, że inne oznaczenia zmiennych.
-
lolwat
- Użytkownik

- Posty: 4
- Rejestracja: 23 sie 2010, o 14:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
Post
autor: lolwat » 23 sie 2010, o 19:57
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
Kod: Zaznacz cały
if((ldouble)a/b < (ldouble)c/d){
std::cout<<"NIE"<<std::endl;
continue;
}
I od razu zaakceptowany .
Dziękuję za pomoc i pozdrawiam!
-
Satirev
- Użytkownik

- Posty: 22
- Rejestracja: 10 sie 2010, o 00:57
- Płeć: Mężczyzna
- Lokalizacja: Poznań
- Pomógł: 1 raz
Post
autor: Satirev » 23 sie 2010, o 22:43
Nie ma za co. Huh, ja mam więcej "głównych" warunków Z czystej ciekawości jaki czas wykonywalny programu uzyskałeś?
-
lolwat
- Użytkownik

- Posty: 4
- Rejestracja: 23 sie 2010, o 14:56
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
Post
autor: lolwat » 24 sie 2010, o 10:37
Głównych warunków oczywiście jest więcej . Podałem ten którego brakowało. Po oczyszczeniu kodu uzyskałem 0.04s.
-
Satirev
- Użytkownik

- Posty: 22
- Rejestracja: 10 sie 2010, o 00:57
- Płeć: Mężczyzna
- Lokalizacja: Poznań
- Pomógł: 1 raz
Post
autor: Satirev » 24 sie 2010, o 11:39
O ja...w takim wypadku chyba muszę poszukac informacji o skracaniu kodu, bo mój aktualny czas to wstyd