Prostokąt przesunięty o zadany wektor

0

Witam,

Mam takie zadanie:

"Napisać metodę przesuwającą prostokąt o zadany wektor. Jeśli to coś ułatwi, można zmodyfikować klasę Punkt".

Napisałem taką wersję roboczą - metoda "PrzesuńOWektor". Pytanie, czy poprawnie?

 
#include "stdafx.h"
#include <iostream>

using namespace std;

class Prostokat
{
private:
    double przekątnaAx; 
    double przekątnaAy;
    double przekątnaDx;
    double przekątnaDy;
    //double długośćBokuA;
    //double długośćBokuB;
    //double przekątnaC;
    double wektorA; // współrzędna X wektora, który przesuwa prostokąt 
    double wektorB; // współrzędna Y wektora, który przesuwa prostokąt
public:
    // ustaw przekątną A i D
    void Ustaw1(double aPrzekatnaAx, double aPrzekatnaAy, 
		double aPrzekatnaDx, double aPrzekatnaDy)
    {
        przekątnaAx = aPrzekatnaAx;
        przekątnaAy = aPrzekatnaAy;
        przekątnaDx = aPrzekatnaDx;
        przekątnaDy = aPrzekatnaDy;
    }
	
	// ustaw wierzchołki B i C
    void Ustaw2(double aWierzchołekBx, double aWierzchołekAy, 
		        double aWierzchołekCx, double aWierzchołekCy)
    { 
        // wierzchołek B            
        przekątnaDx = aWierzchołekBx;
        przekątnaAy = aWierzchołekAy;
        // wierzchołek C
        przekątnaDy = aWierzchołekCx;
        przekątnaAx = aWierzchołekCy;
    }

    // wierzchołek A i długośc boków a i b
    // wierzchołek A i długość boków a i b
    void Ustaw3(double aPrzekatnaAx, double aPrzekatnaAy, 
                double aDługośćBokuA, double aDługośćBokuB)
    {   
        // wierzchołek A
        przekątnaAx = aPrzekatnaAx;
        przekątnaAy = aPrzekatnaAy;
        przekątnaDx = przekątnaAx+aDługośćBokuA;
        przekątnaDy = przekątnaAy+aDługośćBokuB;
    }

    // ustaw współrzędne wierchołka A oraz dł. boków a i przekątnej c
   void Ustaw4(double aPrzekatnaAx, double aPrzekatnaAy,
                double aDługośćBokuA, double aPrzekątnaC)
    {
        // wierzchołek A
        przekątnaAx = aPrzekatnaAx;
        przekątnaAy = aPrzekatnaAy;
        przekątnaDx = przekątnaAx+aDługośćBokuA;
        //poniższy wzór korzysta z tw. Pitagorasa
        przekątnaDy = przekątnaAy+sqrt(aPrzekątnaC*aPrzekątnaC-aDługośćBokuA*aDługośćBokuA);
    }
         
    // metoda ma przesunąć prostokąt o zadany wektor
    void PrzesuńOWektor(double wierzchołekAprimX, double wierzchołekAprimY, 
                        double wierzchołekBprimX, double wierzchołekBprimY,
                        double wierzchołekCprimX, double wierzchołekCprimY,
                        double wierzchołekDprimX, double wierzchołekDprimY, 
                        double aWektorA, double aWektorB)
    {
        // parametry wektora
        wektorA = aWektorA;
        wektorB = aWektorB;
        // punkt przesunięty A`
        wierzchołekAprimX = przekątnaAx + wektorA;
        wierzchołekAprimY = przekątnaAy + wektorB;
        // punkt przesunięty B`
        wierzchołekBprimX = przekątnaDx + wektorA;
        wierzchołekBprimY = przekątnaAy + wektorB;
        // punk przesunięty C`
        wierzchołekCprimX = przekątnaDy + wektorA;
        wierzchołekCprimY = przekątnaAx + wektorB;
        // punkt przesunięty D`
        wierzchołekDprimX = przekątnaDx + wektorA;
        wierzchołekDprimY = przekątnaDy + wektorB;
        // sprawdzam wypisując na ekran przesunięte wierzchołki A`, B` ...
        cout << "wierzcholek AprimX:    " << wierzchołekAprimX << endl;
        cout << "wierzcholekAprimY: " << wierzchołekAprimY << endl;
        cout << "wierzcholekBprimX: " << wierzchołekBprimX << endl;
        cout << "wierzcholekBprimY: " << wierzchołekBprimY << endl;
        // ...
    }

	/*
	void CzyProstokatRownolegly()
	{
		if ((przekatnaAx == przekatnaAx) && (przekatnaAy == przekatnaAy)) // to przecież nie ma sensu
			cout << "Jest równoległy";
		else
			cout << "Nie jest równoległy" << endl;
	}
	*/

	int CzyProstokatRownolegly()
	{
		return 1;
	}



};


int _tmain(int argc, _TCHAR* argv[])
{
    Prostokat prostokat;
    prostokat.Ustaw1(2, -8, 7, -11);
    prostokat.Ustaw2(7, -8, -11, 2);
    prostokat.Ustaw3(2, -8, 5, 3);
    prostokat.Ustaw4(2, -8, 5, 5);
    prostokat.PrzesuńOWektor(2, -8, 7, -8, -11, 2, 7, -11, 3, 2);
    system("pause");
    return 0;
}




0
  1. Czy to próbowałeś kompilować? Jeśli tak, to jakim cudem pozwoliło na użycie liter ą, ł itp. w nazwie zmiennej?
  2. Metoda PrzesuńOWektor (a po odpowiedniej zmianie, PrzesunOWektor) powinna zmodyfikować pola klasy: przekątne Ax,Ay,Dx,Dy. W takim razie nie ma potrzeby użycia aż 8 zbędnych parametrów (wierzchołek...).
  3. Wydaje mi się, że jest bezsensowne dodawanie w klasie pól wektorA oraz wektorB - zostają one użyte tylko raz i to właśnie w tej metodzie, gdzie masz zdefiniowane ich odpowiedniki aWektorA i aWektorB.
0

Jeśli chodzi o zmienne. Kompilowałem w Visual C++ Express 2010.

Porawiona metoda PrzesunOwektor2

Przesunięcie o wektor (translacja) powinna działać, wg. tego wzoru:

A = [Ax + wektorA, Ay + wektorB] B = [Dx + wektorA, Ay + wektorB]
C = [Dy + wektorA, Ax + wektorB] D = [Dx + wektorA, Dy + wektorB]

Dla:
A = (2, -8)
D = (7, -11)

powinno zwrócić:

A = [5, -6] B = [10, -6]
C = [-8, 4] D = [10, -9]

 
class Prostokat
{
private:
    double przekatnaAx; 
    double przekatnaAy;
    double przekatnaDx;
    double przekatnaDy;
public:
    // metoda ma przesunąć prostokąt o zadany wektor
    void PrzesunOwektor2(double aPrzekatnaAx, double aPrzekatnaAxBis, double aPrzekatnaAy, 
                        double aPrzekatnaDx, double aPrzekatnaDy, 
                        double wektorA, double wektorB)
    {
        // punkt przesunięty A`
        aPrzekatnaAx = przekatnaAx + wektorA;
        aPrzekatnaAy = przekatnaAy + wektorB;
        // punkt przesunięty B`
        aPrzekatnaDx = przekatnaDx + wektorA;
        aPrzekatnaAy = przekatnaAy + wektorB;
        // punk przesunięty C`
        aPrzekatnaDy = przekatnaDy + wektorA;
        aPrzekatnaAxBis = przekatnaAx + wektorB; 
        // punkt przesunięty D`
        aPrzekatnaDx = przekatnaDx + wektorA;
        // sprawdzam wypisując na ekran przesunięte wierzchołki A`, B` ...
        cout << "wierzcholekAprimX: " << aPrzekatnaAx << endl;
        cout << "wierzcholekAprimY: " << aPrzekatnaAy << endl;
        cout << "wierzcholekBprimX: " << aPrzekatnaDx << endl;
        cout << "wierzcholekBprimY: " << aPrzekatnaAy << endl;
        // ...
    }


int _tmain(int argc, _TCHAR* argv[])
{
    Prostokat prostokat;
    prostokat.Ustaw1(2, -8, 7, -11);
    prostokat.Ustaw2(7, -8, -11, 2);
    prostokat.Ustaw3(2, -8, 5, 3);
    prostokat.Ustaw4(2, -8, 5, 5);
    //prostokat.PrzesunOwektor(2, -8, 7, -8, -11, 2, 7, -11, 3, 2);
    prostokat.PrzesunOwektor2(2, 2, -8, 7, -11, 3, 2);
    system("pause");
    return 0;
}

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