webForumDet fria alternativet

Vända koordinatsystem

.NET

4 svar · 514 visningar · startad av haagel

Medlem sedan feb. 2006134 inlägg
Frågan#1

Jag ska rita ut ett koordinatsystem med axlar. I detta ska jag sedan rita ut punkter och linjer mellan punkterna.

Jag använder GDI+ och ritar ut detta i en panel.

Vanligvis när man ritar ut grafik så utgår koordinaterna från övre vänstra hörnet, och y-axeln är positiv nedåt. När man ritar standard-diagram är ju dock origo i nedre vänstra hörnet och y-axeln är positiv uppåt.

Finns det något enkelt (färdigt) sätt i .NET att ändra koordinatsystemet när man ritar?

Att bara flytta origo är ju lätt med Graphics.TranslateTransform(), men att få y-axeln att vara positiv uppåt istället för nedåt vet jag inte hur man gör.

Iofs så skulle det ju gå att bara flytta ner origo och sedan "översätta" koordinaterna så att alla y-koordinater blir negativa. Men jag tänkte att detta borde vara ganska vanligt och att det därför kanske finns något färdigt i .NET för att ändra koordinatsystemet.

Medlem sedan feb. 20002 300 inlägg
#2

haagel skrev:

Jag ska rita ut ett koordinatsystem med axlar. I detta ska jag sedan rita ut punkter och linjer mellan punkterna.

Jag använder GDI+ och ritar ut detta i en panel.

Vanligvis när man ritar ut grafik så utgår koordinaterna från övre vänstra hörnet, och y-axeln är positiv nedåt. När man ritar standard-diagram är ju dock origo i nedre vänstra hörnet och y-axeln är positiv uppåt.

Finns det något enkelt (färdigt) sätt i .NET att ändra koordinatsystemet när man ritar?

Att bara flytta origo är ju lätt med Graphics.TranslateTransform(), men att få y-axeln att vara positiv uppåt istället för nedåt vet jag inte hur man gör.

Iofs så skulle det ju gå att bara flytta ner origo och sedan "översätta" koordinaterna så att alla y-koordinater blir negativa. Men jag tänkte att detta borde vara ganska vanligt och att det därför kanske finns något färdigt i .NET för att ändra koordinatsystemet.

Kolla på Transform på ditt Graphics-objekt. Om du speglar y-axeln så kommer origo vara nere i vänstra hörnet. Nånting sånthär:

Graphics g = e.Graphics;
Matrix matr = new Matrix(1,0,0,-1,0,this.Height);
g.Transform = matr;
Medlem sedan aug. 20039 340 inlägg
#3

Graphics.ScaleTransform(1, -1) kanske?

Medlem sedan aug. 20039 340 inlägg
#4

Jaha, det går att definiera en helt egen transformationmatris... Jag googlade för att få fram mitt svar. (Jag känner inte till GDI+)

Medlem sedan feb. 2006134 inlägg
#5

Tackar! :)

261 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)