Czy da się odnaleźć współrzędne danych punktów prostokąta?

Obiekty i przekształcenia geometryczne, opisane za pomocą układu (nie zawsze prostokątnego) współrzędnych.
Baden
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 1 lis 2016, o 17:34
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 1 raz

Czy da się odnaleźć współrzędne danych punktów prostokąta?

Post autor: Baden »

Witam,
Pytanie jak w temacie, czy da się odnaleźć współrzędne szukanych punktów prostokąta przedstawionego na obrazku? Z góry przepraszam jeśli to nie ten dział. Tworzę aplikację i nie wiem jak odnaleźć współrzędne tych dwóch punktów i czy jest to możliwe. Nie będę się rozpisywał co i jak, chyba że będzie to potrzebne. Prostokąt obraca się w okół osi Z, która nie jest tutaj ujęta, ponieważ nie jest to istotne. Znany jest kąt \(\displaystyle{ \alpha}\) jego obrotu, punkt początkowy P1 i końcowy P3, podobnie jak P5, czyli środek prostokąta.

Z góry dziękuję

Awatar użytkownika
kerajs
Użytkownik
Użytkownik
Posty: 8581
Rejestracja: 17 maja 2013, o 10:23
Płeć: Mężczyzna
Podziękował: 307 razy
Pomógł: 3349 razy

Czy da się odnaleźć współrzędne danych punktów prostokąta?

Post autor: kerajs »

Tak.
Niewiadoma \(\displaystyle{ P_5}\) jest zbędna.
\(\displaystyle{ P_4:\\
\begin{cases} x_4= \frac{y_3+x_3\tg \alpha -y_1+x_1\ctg \alpha }{\tg \alpha +\ctg \alpha } \\ y_4=\ctg \alpha (\frac{y_3+x_3\tg \alpha -y_1+x_1\ctg \alpha }{\tg \alpha +\ctg \alpha } -x_1)+y_1 \end{cases}}\)

\(\displaystyle{ P_2:\\
\begin{cases} x_2= \frac{y_1+x_1\tg \alpha -y_3+x_3\ctg \alpha }{\tg \alpha +\ctg \alpha } \\ y_2=\ctg \alpha (\frac{y_1+x_1\tg \alpha -y_3+x_3\ctg \alpha }{\tg \alpha +\ctg \alpha } -x_3)+y_3 \end{cases}}\)
Baden
Użytkownik
Użytkownik
Posty: 2
Rejestracja: 1 lis 2016, o 17:34
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 1 raz

Czy da się odnaleźć współrzędne danych punktów prostokąta?

Post autor: Baden »

Bardzo dziękuję za rozwiązanie, jutro sprawdzę i dam znać.
adamolesiak
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 3 lis 2016, o 22:23
Płeć: Mężczyzna
Lokalizacja: Warszawa

Czy da się odnaleźć współrzędne danych punktów prostokąta?

Post autor: adamolesiak »

Cześć, mam bardzo podobny problem, tylko że u mnie jedyne dane, to \(\displaystyle{ P_5}\) i kąt alfa. Czy mógłbyś powiedzieć jak doszedłeś do tego rozwiązania?

Ja rozwiązuje to samymi kątami prostymi i sinusem/cosinusem, ale wynik wychodzi mi poprawny dopiero jak rozważę 4 przypadki dla alfa \(\displaystyle{ 0-90, 90-180, 180-270, 270-360}\). Bardzo dużo w tym liczenia, a korzystam z tego w programie, który musi to obliczać 60 razy na sekundę, aby obliczać pozycję obiektu w kolejnych klatkach, obliczenia spowalniają program i bardzo przydałby mi się taki uogólniony wzór
Ostatnio zmieniony 3 lis 2016, o 22:56 przez Jan Kraszewski, łącznie zmieniany 1 raz.
Powód: Używaj LaTeXa do wszystkich wyrażeń matematycznych.
Awatar użytkownika
kerajs
Użytkownik
Użytkownik
Posty: 8581
Rejestracja: 17 maja 2013, o 10:23
Płeć: Mężczyzna
Podziękował: 307 razy
Pomógł: 3349 razy

Czy da się odnaleźć współrzędne danych punktów prostokąta?

Post autor: kerajs »

adamolesiak pisze:Cześć, mam bardzo podobny problem, tylko że u mnie jedyne dane, to \(\displaystyle{ P_5}\) i kąt alfa.
Moim zdaniem to zbyt mało danych
adamolesiak pisze:Czy mógłbyś powiedzieć jak doszedłeś do tego rozwiązania?
Proste przechodzące przez \(\displaystyle{ P_1}\) to:
\(\displaystyle{ l_1 \ : \ y-y_1=\ctg \alpha (x-x_1)\\
k_1 \ : \ y-y_1=-\tg \alpha (x-x_1)}\)

a proste przechodzące przez \(\displaystyle{ P_3}\) to:
\(\displaystyle{ l_2 \ : \ y-y_3=\ctg \alpha (x-x_3)\\
k_2 \ : \ y-y_3=-\tg \alpha (x-x_3)}\)

Wzory na pozostałe punkty dostałem z rozwiązania układów równań:
\(\displaystyle{ P_2:\\
\begin{cases} k_1 \\ l_2 \end{cases} \\
P_4:\\
\begin{cases} k_2 \\ l_1 \end{cases}}\)
adamolesiak
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 3 lis 2016, o 22:23
Płeć: Mężczyzna
Lokalizacja: Warszawa

Czy da się odnaleźć współrzędne danych punktów prostokąta?

Post autor: adamolesiak »

Ok, dziękuję-- 4 lis 2016, o 00:46 --Do autora postu, może Ci się przyda:
Podajesz współrzędne P{5}, długość prostokąta, szerokość prostokąta, i alpha oznaczający kąt między osią OY i szerokością.
Otrzymujesz współrzędne 4 punktów(zgodnie ze wskazówkami zegara, na Twoim rysunku dostałbyś P2,P3,P4,P1.)



#include <iostream>
#include <cmath>

using namespace std;

int main()
{
double angle=M_PI/4,car_length=15,car_width=15,x_position=0,y_position=0;//To zmieniasz

double x_h, y_h;//punkt pomocniczy H
double x1,x2,x3,x4,y1,y2,y3,y4;//wspolrzedne 4 punktow
int case_x1=1,case_x2=1,case_x3=1,case_x4=1,case_x_h=1,case_y1=1,case_y2=1,case_y3=1,case_y4=1,case_y_h=1;//na pewno da sie lepiej i prosciej, ale tak tez dziala
while(angle>2*M_PI)
{
angle-=2*M_PI;//redukcja niepotrzebnego
}
if(angle<=0.5*M_PI)
{
cout<<1<<endl;
case_x1=1;case_x2=-1;case_x3=-1;case_x4=1;case_x_h=1;case_y1=-1;case_y2=-1;case_y3=1;case_y4=1;case_y_h=1;
}
else if(angle<=M_PI)
{
cout<<2<<endl;
case_x1=-1;case_x2=-1;case_x3=1;case_x4=1;case_x_h=1;case_y1=-1;case_y2=1;case_y3=1;case_y4=-1;case_y_h=-1;
}
else if(angle<=1.5*M_PI)
{
cout<<3<<endl;
case_x1=-1,case_x2=1,case_x3=1,case_x4=-1,case_x_h=-1,case_y1=1,case_y2=1,case_y3=-1,case_y4=-1,case_y_h=-1;
}
else if(angle<=2*M_PI)
{
cout<<4<<endl;
case_x1=1,case_x2=1,case_x3=-1,case_x4=-1,case_x_h=-1,case_y1=1,case_y2=-1,case_y3=-1,case_y4=1,case_y_h=1;
}
while(angle>=0.5*M_PI)
{
angle-=0.5*M_PI;//redukcja niepotrzebnego
}
x_h=x_position+case_x_h*(car_length*sin(angle))/2;
y_h=y_position+case_y_h*(car_length*cos(angle))/2;

x1=x_h+case_x1*(car_width*cos(angle))/2;
y1=y_h+case_y1*(car_width*sin(angle))/2;

x2=x1+case_x2*(car_length*sin(angle));
y2=y1+case_y2*(car_length*cos(angle));

x3=x2+case_x3*(car_width*cos(angle));
y3=y2+case_y3*(car_width*sin(angle));

x4=x3+case_x4*(car_length*sin(angle));
y4=y3+case_y4*(car_length*cos(angle));

//cout<<x_h<<" "<<y_h<<endl;
cout<<x1<<" "<<y1<<endl;
cout<<x2<<" "<<y2<<endl;
cout<<x3<<" "<<y3<<endl;
cout<<x4<<" "<<y4<<endl;
}
ODPOWIEDZ