Rotatetransform przemieszcza mi figure

Odpowiedz Nowy wątek
2015-01-12 19:33
0

Witam, przy próbie narysowania trójkącika i obróceniu go o 45 stopni, czyli tak, aby wskazywał północny wschód program obraca mi go, ale przy okazji przemieszcza, a chciałbym aby pozostał w tym samym miejscu(tzn czubek, czyli ten punkt 100,100 był w tym samym miejscu a pozostałe 2 punkty odpowiednio przesunięte). Czy ktoś mógłby mi powiedzieć co robie nie tak? Podrzucam kod i screena

user image

  Graphics grafika = panel2.CreateGraphics();
            Point pk1=new Point(100,100);
            Point pk2=new Point(105,105);
            Point pk3=new Point(95,105);
            Point[] punkty = { pk1, pk2, pk3 };
            grafika.DrawPolygon(Pens.Black, punkty);

            grafika.TranslateTransform(100, 100); 
            grafika.RotateTransform(45);
            grafika.DrawPolygon(Pens.Black, punkty);

Pozostało 580 znaków

2015-01-12 20:19

Musisz inaczej zdefiniować punkty. Ten wokół, którego trójkąt się obraca powinien mieć (0,0). Taką figurę po obrocie możesz sobie przesuwać gdzie zechcesz. Przekształcenia zawsze działają w kontekście całego układu współrzędnych, a nie tylko dla rysowanych figur.

edytowany 4x, ostatnio: Spine, 2015-01-12 20:22

Pozostało 580 znaków

2015-01-12 22:33
0

Dzięki, pomogło temat zamknięty.

Pozostało 580 znaków

2015-01-15 16:04
0

Nasuneło mi się nowe pytanie, obracam ten trójkąt, jednak nie mam pojęcia jak moge dokonać podwójnego obrotu, tzn strzałke chce obrócić pierw o kąt załózmy 45 stopni, a potem całość (bez ruszania orientacji strzalki) odpowiednio obrócić do miejsca w którym ma być na obrazie, ma ktoś jakiś pomysł jak się do tego dobrać? Da sie pierw obrócić figure a potem obrócić jej położenie względem jakiegoś punktu?

Pozostało 580 znaków

2015-01-15 16:21
0

Czyli chce najpierw obrócić trójkąt tak, aby wskazywał kierunek, a potem go obrócić względem punktu 0,0 tak, aby trójkąt nie zmienił kierunku

Pozostało 580 znaków

2015-01-15 19:28
0

Da się. Musisz się nauczyć składać przekształcenia. Prawdopodobnie to będzie jak w OpenGL, czyli wszystkie operacje są wykonywane od dołu.

np. w kodzie masz: translacja, rotacja, rotacja2, rysowanie

W momencie rysowania, ze stosu jest najpierw brana rotacja2, potem rotacja, a na końcu translacja -> w tej kolejności przekształcenia są wykonywane. Musisz przekształcenia tak poukładać, żeby osiągnąć zamierzony efekt.

edytowany 3x, ostatnio: Spine, 2015-01-15 19:30

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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