Stworzenie klasy Obraz, zawierającej listę trójkątów i czworokątów

0

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. Utworzyłem ją 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 w tym wypadku 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ę.

>
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.

1

Dopisz klasę Wielokat, klasy Trojkat i Czworokat będą po niej dziedziczyć. A lista będzie zawierała obiekty typu Wielokat.
Zmień też wewnętrzną strukturę klas Trojkat i Czworokat - pamiętaj wierzchołki a nie odcinki (boki). Trzy punkty zawsze wyznaczają trójkąt (być może zdegenerowany), a trzy odcinki rzadko kiedy.

0

Dzięki za podpowiedź, ale dalej nie mam pomysłu, jak stworzyć klasę Wielokat, by dziedziczyły po niej trójkąty i czworokąty na raz.
Co do linii - niestety muszę winę zrzucić na polecenie :P Warunki co do punktów miałem dodać na koniec.

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