Prostokąt o bokach równoległych do osi układu współrzędnych

0

Witam,

Jak sprawdzić, że Prostokąt jest równoległy do osi układu współrzędnych?

0

Przyjmując, że znasz współrzędne wierzchołków prostokąta, sprawdzasz czy odpowidnio x-owe i y-owe współrzędne danych wierzchołków są sobie równe.

0

Prostokąt ma być zapamiętany jako dwa przeciwległe rogi

Początkowo kombinowałem, że jeśli przekątna ma współrzędne parzyste,
to równoległy prostokąt do osi układu współrzędnych, ale to błędne wnioski.

0

Mając tylko 2 przeciwległe rogi to nawet na logikę na dobrą sprawę nie sprawdzisz czy prostokąt ma boki rownolegle do osi układu. Przecież można zbudować mnóstwo prostokątów, które nie spełnią tego warunku. Napisz dokładniej o co Ci chodzi.

0

Ok, to zamieszczę całą treść zadania.
"Napisać klasę Prostokąt, która pamięta dane dla prostokąta o bokach równoległych do osi układu współrzędnych. Prostokąt ma być zapamiętany jako dwa przeciwległe rogi i nie posiadać atrybutów publicznych. Napisać co najmniej 3 metody ustaw do ustawiania tego prostokąta".

1
TAXIarz napisał(a)

Ok, to zamieszczę całą treść zadania.
"Napisać klasę Prostokąt, która pamięta dane dla prostokąta o bokach równoległych do osi układu współrzędnych Prostokąt ma być zapamiętany jako dwa przeciwległe rogi i nie posiadać atrybutów publicznych. Napisać co najmniej 3 metody ustaw do ustawiania tego prostokąta".

Zatem, prostokąt zawsze ma mieć boki równoległe do osi układu wspł.

0

Mając prostokąt ABCD i mając komplet współrzędnych:
A(2, 2);
B(7, 2);
C(7, 4);
D(2, 4);

Porównuje współrzędną A(2, 2) i D(2, 4) x-ksy
Porównuje współrzędną A(2, 2) i B(7, 2) y-ki

Wtedy prostokąt jest równoległy do osi układu współrzędnych.

Ale z treści wynika, że mam tylko współrzędne przekątnej.

0

Skoro masz wspolrzedne przeciwleglych wierzcholkow to mzoesz przeciez odtworzyc 2 pozostale wierzcholki, biorac wsp x-owe i y-owe z tych, ktore masz.

A(2, 2);
B(7, 2);
C(7, 4);
D(2, 4);

Zobacz, ze wspolrzedne punktów B i D wynikaja z A i C. Kombinuj :)

0

Faktycznie, zapisując to "swobodnie":
Mając A(2, 2); C(7,4)
Dostaję D(Ax, Cy); B(Cx, Ay)

0

Zatrzymałem się na metodzie CzyRównoległe().
Nie wiem, jak dostać się do pól z metody Ustaw2()

współrzędnaDx
współrzędnaBy

 
using System;

namespace _7_Prostokąt
{
    class Prostokąt
    {
        private double przekatnaAx; // mamy tylko wspolrzedne przekatnej AC
        private double przekatnaAy;
        private double przekatnaCx;
        private double przekatnaCy;

        public void UstawPrzekątną1(double aPrzekatnaAx, double aPrzekatnaAy,
                                double aPrzekatnaCx, double aPrzekatnaCy)
        {
            przekatnaAx = aPrzekatnaAx;
            przekatnaAy = aPrzekatnaAy;
            przekatnaCx = aPrzekatnaCx;
            przekatnaCy = aPrzekatnaCy;
        }

        public void Ustaw2()
        {
            double współrzędnaDx = przekatnaAx;
            double współrzędnaDy = przekatnaCy;
            double współrzędnaBx = przekatnaCx;
            double współrzędnaBy = przekatnaAy;
            // sprawdzam te współrzędnę
            Console.WriteLine("Wspołrzędna Dx: " + współrzędnaDx);
            Console.WriteLine("Współrzędna Dy: " + współrzędnaDy);
            Console.WriteLine("Współrzędna Bx: " + współrzędnaBx);
            Console.WriteLine("Współrzędna By: " + współrzędnaBy);
        }

        public void CzyRównoległe()
        {
            if ( (przekatnaAx == współrzędnaDx) && (przekatnaAy == współrzędnaBy)) // tutaj źle
            {
                Console.WriteLine("Prostokąt równoległy");    
            }
            else
            {
                Console.WriteLine("Prostokąt nie jest równoległy");
            }
        }


    }
}
0

Próbujesz odwołać się do zmiennych lokalnych, zadeklaruj je poza ciałem metod.

0

Najprościej byłoby tak:

 
using System;

namespace _7_Prostokąt
{
    class Prostokąt
    {
        private double przekatnaAx; // mamy tylko wspolrzedne przekatnej AC
        private double przekatnaAy;
        private double przekatnaCx;
        private double przekatnaCy;
        private double współrzędnaDx = 2;
        private double współrzędnaBy = 2;

        public void UstawPrzekątną1(double aPrzekatnaAx, double aPrzekatnaAy,
                                double aPrzekatnaCx, double aPrzekatnaCy)
        {
            przekatnaAx = aPrzekatnaAx;
            przekatnaAy = aPrzekatnaAy;
            przekatnaCx = aPrzekatnaCx;
            przekatnaCy = aPrzekatnaCy;
        }

        public void Ustaw2()
        {
            double współrzędnaDx = przekatnaAx;
            double współrzędnaDy = przekatnaCy;
            double współrzędnaBx = przekatnaCx;
            double współrzędnaBy = przekatnaAy;
            // sprawdzam te współrzędne
            Console.WriteLine("Wspołrzędna Dx: " + współrzędnaDx);
            Console.WriteLine("Współrzędna Dy: " + współrzędnaDy);
            Console.WriteLine("Współrzędna Bx: " + współrzędnaBx);
            Console.WriteLine("Współrzędna By: " + współrzędnaBy);
        }

        public void CzyRównoległe()
        {
            if ( (przekatnaAx == współrzędnaDx) && (przekatnaAy == współrzędnaBy))
            {
                Console.WriteLine("Prostokąt równoległy");    
            }
            else
            {
                Console.WriteLine("Prostokąt nie jest równoległy");
            }
        }


    }
}
////////////////////////////

using System;

namespace _7_Prostokąt
{
    class Program
    {
        static void Main(string[] args)
        {
            Prostokąt p = new Prostokąt();
            p.UstawPrzekątną1(2, 2, 7, 4);
            p.Ustaw2();
            p.CzyRównoległe();
            Console.ReadKey();
        }
    }
}



Ale chodzi o to, żeby polom przypisać przekatnaAx i przekatnaAy

         
private double współrzędnaDx = 2; // to nie jest rozwiązanie
private double współrzędnaBy = 2;

współrzędnaDx = przekatnaAx;
współrzędnaBy = przekatnaAy;

Pytanie, jak to przypisać, żeby działało?

0

Czegoś nie rozumiem, popraw mnie jeżeli się mylę:
Potrzebujesz zmienne
współrzędnaDx
współrzędnaBy
aby sprawdzić warunek
(przekatnaAx == współrzędnaDx) && (przekatnaAy == współrzędnaBy)
ale przed tym chcesz te zmienne ustawić
współrzędnaDx = przekatnaAx;
współrzędnaBy = przekatnaAy;
Jeżeli dobrze zrozumiałem to najprościej warunek zamienić na
true
oraz wywalić każdy wiersz w którym jest słówko
współrzędna
i będzie dokładnie to co chcesz.

0

W tagach C++, w postach C#, to w końcu w czym?

0
_13th_Dragon napisał(a)

Czegoś nie rozumiem, popraw mnie jeżeli się mylę:
Potrzebujesz zmienne
współrzędnaDx
współrzędnaBy
aby sprawdzić warunek
(przekatnaAx == współrzędnaDx) && (przekatnaAy == współrzędnaBy)
ale przed tym chcesz te zmienne ustawić
współrzędnaDx = przekatnaAx;
współrzędnaBy = przekatnaAy;
Jeżeli dobrze zrozumiałem to najprościej warunek zamienić na
true
oraz wywalić każdy wiersz w którym jest słówko
współrzędna
i będzie dokładnie to co chcesz.

Właściwie, to pola:
współrzędnaDx
współrzędnaBy
Są nadmiarowe, a w zadaniu jest napisane, że posługujemy się tylko współrzędnymi przekątnej.

Ja rozumowałem to tak, że Prostokąt jest równoległy do osi układu współrzędnych, kiedy:
Ax == Dx && Ay == By.

Już poprawiam na C++. Miałem kłopoty ze średnikiem na końcu klasy.

 
// Prostokąt.cpp : Defines the entry point for the console application.
//

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

using namespace std;

class Prostokat
{
private:
	double przekatnaAx; // mamy tylko wspolrzedne przekatnej AC
	double przekatnaAy;
	double przekatnaCx;
	double przekatnaCy;
public: 
	void UstawPrzekatna(double aPrzekatnaAx, double aPrzekatnaAy, 
		double aPrzekatnaCx, double aPrzekatnaCy)
	{
		przekatnaAx = aPrzekatnaAx;
		przekatnaAy = aPrzekatnaAy;
		przekatnaCx = aPrzekatnaCx;
		przekatnaCy = aPrzekatnaCy;
	}

	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 _tmain(int argc, _TCHAR* argv[])
{
	Prostokat prostokat;
	prostokat.UstawPrzekatna(2, 2, 7, 4);
	prostokat.CzyProstokatRownolegly();

	system("pause");
	return 0;
}
0

Ja rozumowałem to tak, że Prostokąt jest równoległy do osi układu współrzędnych, kiedy:
Ax == Dx && Ay == By.

Bo to prawda.

0
Azarien napisał(a)

Ja rozumowałem to tak, że Prostokąt jest równoległy do osi układu współrzędnych, kiedy:
Ax == Dx && Ay == By.

Bo to prawda.

Co do warunku typowo matematycznego zgadzamy się,
pytanie teraz, czy metoda jest prawidłowo napisana?

 
        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;
        }
0

Przeczytaj jeszcze raz, ze zrozumieniem, zadanie. Nie posługujemy się przekątnymi, ale współrzędnymi dwóch przeciwległych wierzchołków.
Metoda CzyProstokatRownolegly() jest całkowicie niepotrzebna, innych prostokątów nie ma. Jak się do niej bardzo przywiązałeś, to masz:

int CzyProstokatRownolegly()
{
   return 1;
}

Twoja wersja tej metody jest raczej bez sensu i mało przydatna, metoda ma zwracać informację czy prostokąt jest równoległy, a nie wypisywać coś na ekran.

0
bo napisał(a)

Przeczytaj jeszcze raz, ze zrozumieniem, zadanie. Nie posługujemy się przekątnymi, ale współrzędnymi dwóch przeciwległych wierzchołków.
Metoda CzyProstokatRownolegly() jest całkowicie niepotrzebna, innych prostokątów nie ma. Jak się do niej bardzo przywiązałeś, to masz:

int CzyProstokatRownolegly()
{
   return 1;
}

Twoja wersja tej metody jest raczej bez sensu i mało przydatna, metoda ma zwracać informację czy prostokąt jest równoległy, a nie wypisywać coś na ekran.

Przeczytałem, że trzeba napisać klasę Prostokąt. Teraz tworze obiekt klasy "Prostokat"
"prosotkat2", ustawiam przekatna na (3, 6, 8, 11), stosuje metodę "CzyProstokatRownlolegly".
Wg. tej metody prostokąt jest równoległy. W rzeczywistości nie jest równoległy.

 
int _tmain(int argc, _TCHAR* argv[])
{
	//Prostokat prostokat;
	//prostokat.UstawPrzekatna(2, 2, 7, 4);
	Prostokat prostokat2;
	prostokat2.UstawPrzekatna(3, 6, 8, 11);
	prostokat2.CzyProstokatRownolegly();
	system("pause");
	return 0;
}

0

Przeczytaj treść zadania jeszcze pięć razy. Nie może się pojawić prostokąt o bokach nierównoległych do osi. Jeśli się pojawia, to znaczy że skopałeś konstruktor lub metodę
ustawiającą. Masz napisać trzy metody "ustawiające" prostokąt. Kilka możliwości (zakładam, że metody mogą mieć różne nazwy, zatem mogą mieć argumenty takiego samego typu):
user image

  • podajesz współrzędne wierzchołków A i D,
  • podajesz współrzędne wierzchołków B i C,
  • podajesz współrzędne wierzchołka A oraz długości boków a i b,
  • podajesz współrzędne wierzchołka A oraz długości boku a i przekątnej c,
0

Poprawcie mnie, ale tak nie oznacza się wierzchołków prostokąta. Czy oznacza się zgodnie ze wskazówkami zegara, albo na
odwrót?

0
bo napisał(a)

Przeczytaj treść zadania jeszcze pięć razy. Nie może się pojawić prostokąt o bokach nierównoległych do osi. Jeśli się pojawia, to znaczy że skopałeś konstruktor lub metodę
ustawiającą. Masz napisać trzy metody "ustawiające" prostokąt. Kilka możliwości (zakładam, że metody mogą mieć różne nazwy, zatem mogą mieć argumenty takiego samego typu):
user image

  • podajesz współrzędne wierzchołków A i D,
  • podajesz współrzędne wierzchołków B i C,
  • podajesz współrzędne wierzchołka A oraz długości boków a i b,
  • podajesz współrzędne wierzchołka A oraz długości boku a i przekątnej c,

Roboczą wersję napisałem tak:

 
#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;
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 wierchoł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
    void Ustaw3(double aPrzekatnaAx, double aPrzekatnaAy, 
                double aDługośćBokuA, double aDługośćBokuB)
    {   
        // wierchołek A
        przekątnaAx = aPrzekatnaAx;
        przekątnaAy = aPrzekatnaAy;
	    // długość boków a i b
        długośćBokuA = aDługośćBokuA;
        długośćBokuB = 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;
        // długości boku a i przekątna c
        długośćBokuA = aDługośćBokuA;
        przekątnaC = aPrzekątnaC;
    }

	/*
	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);

    system("pause");
    return 0;
}







0

Ja bym zrezygnował z pól długośćBokuA, długośćBokuB, i przekątnaC. Te wielkości wynikają z pozostałych pól. Trzeba wtedy zmienić metody Ustaw3 i Ustaw4.

class Prostokat
{
private:
    double przekątnaAx; 
    double przekątnaAy;
    double przekątnaDx;
    double przekątnaDy;
public: 
    ....  
    // 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)
    {   
        // wiezchoł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(aPrzekatnaC*aPrzekatnaC-aDługośćBokuA*aDługośćBokuA);
    }
0

Brzmi to jak powtórka z geometrii analitycznej. Oczywiście:
długośćBokuA,
długośćBokuB, i
przekątnaC.

to było uproszczenie, a w zadaniu faktycznie jest napisane,
że posługujemy się tylko dwoma przeciwległymi rogami prostokąta.

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