Jak nadpisać podczas użycia struktury Complex metodę FillEllpise oraz czy w ogóle tędy droga?

0

edit:
Program win forms, vs2012.<- Przypomniało mi się, że tego nie dodałem.

Usiłuję na pixerBoxie narysować punkt reprezentujący liczbę zespoloną. Tak, oczywiście, stworzyłem strukturę Complex. Tak, skompilowałem ją i dodałem przez "using" do projektu. Tak, domyślam się, że metodę fillellipse muszę prawdopodobnie nadpisać w Complexie, bo jest to metoda, która ma parametry brush i rectangle, a u mnie musi być brush i complex. Usiłuje więc w complexie zrobić tak:

using system.drawing;
public override void FillEllipse(Brush brush,Complex z1)
        { 
        
        }
 

Więc w complexie complitor podaje mi informację:
Error 1 The type or namespace name 'Brush' could not be found (are you missing a using directive or an assembly reference?)
Skoro już teraz mam error, to nie zabieram się za tresc nadpisania tej metody.


Natomiast w samym projekcie mam w uproszczeniu coś takiego - oczywiście jest to fragment kodu:

 
public virtual void narysuj()
            {

                TextBox re = new TextBox();
                x = Convert.ToDouble(bs_re.Text);
                TextBox im = new TextBox();
                y = Convert.ToDouble(bs_im.Text);
                Complex z1 = new Complex(x,y);
                SolidBrush pedzel = new SolidBrush(Color.Black);
                bs_Rysownica.FillEllipse(pedzel,z1);
                
            }

Error 1 The best overloaded method match for 'System.Drawing.Graphics.FillEllipse(System.Drawing.Brush, System.Drawing.Rectangle)' has some invalid arguments
Error 2 Argument 2: cannot convert from 'BibliotekaKomponentow.Complex' to 'System.Drawing.Rectangle'

Teraz muszę zadać jeszcze kilka innych pytań:
Czy w przypadku struktury Complex, żeby narysować punkt (liczbę zespoloną), skazany jestem na nadpisanie fillellipse (co mi zresztą nie wychodzi i nawet nie wiem czy jest sens to robić)? czy istnieją jakieś inne metody? W msdn patrzyłem w complexie i nie znalazłem innych. Tzn. innych do rysowania.

0

co za IDE uzywasz ze ci tego nie wylapuje.
a) namespace powinno byc pascal case t.j.

using System.Drawing; 

b) jak to mozliwe ze robisz override FillEllipse w strukturze? przeciez klasa bazowa nie ma takiej wirtualnej metody...
c) aby dalo sie uzyc Rectangle tam gdzie metoda spodziewa sie Complex, musialbys zaimplementowac operator konwersji (implicit) https://msdn.microsoft.com/en-us/library/zk2z37d3.aspx

to tak na poczatek, mysle ze powinienes nauczyc sie podstaw c#, IDE (najlepiej visual studio) zanim zaczniesz pisac takie rzeczy, pisanie 'losowych' konstrukcji i spodziewanie sie ze magicznie wszystko zacznie hulac nie jest najlepszym sposobem na budowanie oprogramowania

0
katelx napisał(a):

co za IDE uzywasz ze ci tego nie wylapuje.
a) namespace powinno byc pascal case t.j.

using System.Drawing; 

b) jak to mozliwe ze robisz override FillEllipse w strukturze? przeciez klasa bazowa nie ma takiej wirtualnej metody...
c) aby dalo sie uzyc Rectangle tam gdzie metoda spodziewa sie Complex, musialbys zaimplementowac operator konwersji (implicit) https://msdn.microsoft.com/en-us/library/zk2z37d3.aspx

to tak na poczatek, mysle ze powinienes nauczyc sie podstaw c#, IDE (najlepiej visual studio) zanim zaczniesz pisac takie rzeczy, pisanie 'losowych' konstrukcji i spodziewanie sie ze magicznie wszystko zacznie hulac nie jest najlepszym sposobem na budowanie oprogramowania

a)oczywiście napisałem dużymi literami
b)dzięki, to ważne info
c)dzięki, przejrzę

0

@katelx, czy mógłbyś podać tutaj przykład takiej konwersji? Tzn. z punktu widzenia mojego kodu. Przejrzałem twój link, ale jakoś nie mogę go przełożyć na mój problem.

edit:
A tak w ogóle to jest nieporozumienie, bo napisałeś "tam, gdzie metoda spodziewa się Complex", a przecież metoda fillellipse spodziewa się rectangle, a nie complex. Więc jeśli już, to muszę prze konwertować Complex na Rectangle. I teraz, czy to da się zrobić?

1
finito napisał(a):

A tak w ogóle to jest nieporozumienie, bo napisałeś "tam, gdzie metoda spodziewa się Complex", a przecież metoda fillellipse spodziewa się rectangle, a nie complex. Więc jeśli już, to muszę prze konwertować Complex na Rectangle. I teraz, czy to da się zrobić?

nie ma potrzeby zebys definiowal wlasny typ, framework posiada strukture dla liczb zespolonych - https://msdn.microsoft.com/en-us/library/system.numerics.complex%28v=vs.110%29.aspx
aby zrobic z tego Rectangle musisz napisac metode w stylu:

 public static Rectangle GetRect(Complex value)
{
//kod...
} 

jesli jednak bardzo chcesz uzyc wlasnego typu Complex to nic nie stoi na przeszkodzie (poza zdrowym rozsadkiem ;), napisz identyczna metode jak powyzej, albo zdefiniuj ten nieszczesny operator konwersji, co najpiekniejszym rozwiazaniem nie jest (swoja droga to w linku ktory ci dalam jest pokazane jak to zrobic) i wrzuc go w swoja strukture

 public static implicit operator Rectangle(Complex value)
{
//kod
//kod
//return new Rectangle...
}
0

nie ma potrzeby zebys definiowal wlasny typ, framework posiada strukture dla liczb zespolonych - https://msdn.microsoft.com/en-us/library/system.numerics.complex%28v=vs.110%29.aspx
aby zrobic z tego Rectangle musisz napisac metode w stylu:

 public static Rectangle GetRect(Complex value)
{
//kod...
} 

Jeszcze jedno pytanie - co dokładnie ma robić metoda GetRect? Nie pytam o kod, bo domyślam się, że bez pracy nie ma kołaczy. Sam się nie wymyśli. Chodzi mi tylko o to co ona ma robić.

0

jak to co ma robic? przeciez chcesz zrobic Rectangle z Complex. wlasnie to ma robic - stworzyc instancje Rectangle uzywajac wlasciwosci instancji Complex

1

No ale czy to co próbujecie zrobić nie jest trochę bez sensu? Jak można liczbę zespoloną (czy tam parę liczb Re(z) Im(z)) zamienić na prostokąt? Przecież to są dwa zupełnie różne byty. Zdefiniowanie prostokąta wymaga podania współrzędnych dwóch wierzchołków, a jedna liczba zespolona może zapewnić co najwyżej jeden...
Skoro trzeba zobrazować na płaszczyźnie punkt, który z definicji nie posiada wymiarów - to nie lepiej narysować koło o środku zdefiniowanym przez współrzędne punktu i jakimś sensownym w danym wypadku promieniu? Coś w rodzaju

int radius = 5;
myObj.FillEllipse(myBrush, z1.Real - radius, z1.Imaginary - radius, 2 * radius, 2 * radius);
0
Bateria napisał(a):

No ale czy to co próbujecie zrobić nie jest trochę bez sensu? Jak można liczbę zespoloną (czy tam parę liczb Re(z) Im(z)) zamienić na prostokąt? Przecież to są dwa zupełnie różne byty. Zdefiniowanie prostokąta wymaga podania współrzędnych dwóch wierzchołków, a jedna liczba zespolona może zapewnić co najwyżej jeden...
Skoro trzeba zobrazować na płaszczyźnie punkt, który z definicji nie posiada wymiarów - to nie lepiej narysować koło o środku zdefiniowanym przez współrzędne punktu i jakimś sensownym w danym wypadku promieniu? Coś w rodzaju

int radius = 5;
myObj.FillEllipse(myBrush, z1.Real - radius, z1.Imaginary - radius, 2 * radius, 2 * radius);

Bateria, masz całkowitą rację. Poza tym, że wczoraj sam do czegoś podobnego doszedłem. Liczbę zespoloną już mi rysuje. Teraz walczę z innymi rzeczami, ale o nie na razie mniejsza, bo po prostu sam się muszę przez nie przebić.

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