[C#] Linia, trójkąt, czworokąt

Jasiul
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 3 lut 2015, o 21:02
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy

[C#] Linia, trójkąt, czworokąt

Post autor: Jasiul »

Mam problem z utworzeniem klasy Obraz, która powinna zawierać listę/tablicę trójkątów i czworokątów. Chodzi o to, że to ma być jedna lista, którą utworzyłem jako listę linii, z których składają się trójkąty i czworokąty, ale na tym się zawiesiłem, ponieważ nie wiem, w jaki sposób zaznaczyć, że wprowadzone linie to trójkąt albo czworokąt, albo w jaki inny sposób wprowadzić klasy trójkąt i czworokąt do jednej listy. Ponadto nie jestem pewien, czy metoda 'przesun' powinna zwracać przesuniętą figurę, czy tylko ją przesuwać. Czy znalazłaby się jakaś miła duszyczka i poprawiła tę rąbankę/naprowadziła mnie na dobry trop? Z góry dziękuję.

Kod: Zaznacz cały

using ConsoleApplication1;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Punkt{
    private int x, y;
	public Punkt(){}
    public Punkt(int xx, int yy){
        x=xx;
        y=yy;
    }
    public Punkt(Punkt p){
        x=p.x;
        y=p.y;
    }
    public Punkt przesun(int dx, int dy){
        return new Punkt(x + dx, y + dy);
	}
    public override string ToString(){
 	string s=" ";
    s=x.ToString()+" "+y.ToString();
    return s;
    }
};

class Linia{
    private Punkt p1, p2;
	public Linia(){}
    public Linia(Punkt a, Punkt b){
        p1=a;
        p2=b;
    }
    public Linia(Linia l){
        p1=new Punkt(l.p1);
        p2=new Punkt(l.p2);
    }
    public Linia przesun(int dx, int dy){
        Linia przesunieta = new Linia(p1, p2);
        p1.przesun(dx, dy);
        p2.przesun(dx, dy);
        return przesunieta;
	}
    public override string ToString(){
        string s = " ";
        s = p1.ToString() + " " + p2.ToString();
        return s;
    }
};

class Trojkat{
    private Linia l1, l2, l3;
	public Trojkat(){}
    public Trojkat(Linia a, Linia b, Linia c){
        l1=a;
        l2=b;
        l3=c;
    }
    public Trojkat(Trojkat t){
        l1=new Linia(t.l1);
        l2=new Linia(t.l2);
        l3=new Linia(t.l3);
    }
    public Trojkat przesun(int dx, int dy){
        Trojkat przesuniety = new Trojkat(l1, l2, l3);
        l1.przesun(dx, dy);
        l2.przesun(dx, dy);
        l3.przesun(dx, dy);
        return przesuniety;
	}
    public override string ToString(){
        string s = " ";
        s = l1.ToString() + " " + l2.ToString()+" "+l3.ToString();
        return s;
    }
};

class Czworokat{
    private Linia l1, l2, l3, l4;
	public Czworokat(){}
    public Czworokat(Linia a, Linia b, Linia c, Linia d){
        l1=a;
        l2=b;
        l3=c;
        l4=d;
    }
    public Czworokat(Czworokat z){
        l1 = new Linia(z.l1);
        l2 = new Linia(z.l2);
        l3 = new Linia(z.l3);
        l4 = new Linia(z.l4);
    }
    public Czworokat przesun(int dx, int dy){
        Czworokat przesuniety = new Czworokat(l1, l2, l3, l4);
        l1.przesun(dx, dy);
        l2.przesun(dx, dy);
        l3.przesun(dx, dy);
        l4.przesun(dx, dy);
        return przesuniety;
	}
    public override string ToString(){
        string s = " ";
        s = l1.ToString() + " " + l2.ToString() + " " + l3.ToString() + " " + l4.ToString();
        return s;
    }
};

class Obraz{
    private List<Linia> obraz;
    public Obraz(){
        obraz = new List<Linia>();
    }
    public void dodaj_troj(Linia line){
        int i = 0;
        while (i < 3){
            obraz.Add(line);
            i++;
        }
    }
};

    class Program
    {
        static void Main(string[] args)
        {
        Punkt p1=new Punkt(0,0), p2=new Punkt(1,1);
        Linia l1=new Linia(p1, p2), l2=new Linia(p1, p2);
        l1.przesun(5,5);
        Console.WriteLine(l1);
        Console.WriteLine(l2);
        }
    }
}
PS. W poleceniu punkt i linia muszą mieć podane konstruktory, ale o konstruktorach w trójkącie i czworokącie nie ma mowy.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C#] Linia, trójkąt, czworokąt

Post autor: Afish »

Nie trzymaj listy linii, tylko utwórz interfejs IFigura, który będą implementowały Trojkat i Czworokat, a potem w Obraz trzymaj listę IFigura.
Ponadto metoda przesun w klasie Linia najpierw tworzy linię przesunieta, potem przesuwa punkty oryginalnej linii, a potem zwraca przesunieta - zadziała?
Osobiście zachowałbym spójność - jeżeli przesun na punkcie tworzy nowy, to tak samo przesun na figurze powinno tworzyć nową.
ODPOWIEDZ