Avatar billede plugin- Nybegynder
04. juli 2005 - 10:07 Der er 1 kommentar og
1 løsning

rotation af et bitmap omkring et punkt i en cirkel?

Hej Eksperter.

Tidligere oprettede jeg en tråd her på sitet omkring hvordan jeg fik et billede til at roterer: http://www.eksperten.dk/spm/622697

Det viser sig nu at denne metode får det pågældende bitmap til at dreje rundt på en lidt sjov måde, da der benyttes en firkant til rotationen. Jeg vil istedet gerne have at billedet skal dreje om et bestemt punkt.

Ved en søgning på google fandt jeg et interessant eksempel: www.publicjoe.f9.co.uk/csharp/card12.html+c%23+rotate+bitmap+any+angle&hl=da" target="_blank">http://66.102.9.104/search?q=cache:ZJaEnhZD0uAJ:www.publicjoe.f9.co.uk/csharp/card12.html+c%23+rotate+bitmap+any+angle&hl=da

Her beskrive der hvordan man får et bitmap til at roterer omkring det ene hjørne af billedet, men hvad nu hvis man vil have billedet til at roterer om et andet punkt? Jeg har lavet en lille tegning så I kan se hvad jeg prøver at opnår: http://www.mpforge.info/temp/demo.jpg

figuren til venstre på ovenstående url, er sådan som man kan rotere billedet vha. eks. med kortene som jeg har henvist til ovenover - altså omkring hjørnet. Til højre er så den rotation jeg gerne vil foretage: På midten af bunden af billedet også lige 2 punkter op.

For at kunne lave denne rotation må vi altså finde ud af hvor 3 af punkterne skal være istedet for kun 2 af dem. Jeg har fundet lidt matematik på google som måske kan hjælpe: http://ga.randers-hf-vuc.dk/matlex/parameter.html#cirkel

Her finder jeg formlen ( a , b ) + r( cos(t) , sin(t) interessant.

Min kode ser så pt ud som følgende:

        void MainFormPaint(object sender, System.Windows.Forms.PaintEventArgs e)
        {
            Graphics g = e.Graphics;           
           
            Bitmap pic = (Bitmap)Image.FromFile(@"..\..\billeder\player_gunned.bmp");
           
            Point location = PointToClient(MousePosition);
           
            int x1 = 100;
            int y1 = 100;

            int degree = 50;
           
            //double sinD = Math.Abs(Math.Sin(degree));
            //double cosD = Math.Abs(Math.Cos(degree));
           
            double radAngle = ((degree / 180.0) * Math.PI);

    // Calculate lower left coordinate
    Point lowerLeft = new Point(
        x1 + (int)(0 * Math.Cos(radAngle)) - pic.Width/2,
        y1 + (int)(0 * Math.Sin(radAngle)));
           
           
    // Calculate upper right coordinate
    Point upperRight = new Point(
        x1 + (int)(pic.Height * Math.Cos(radAngle)) + pic.Width/2,
        y1 + (int)(pic.Height * Math.Sin(radAngle)));

    // Calculate upper left coordinate
    Point upperLeft = new Point(
        x1 + (int)(pic.Height * Math.Cos(radAngle)) - pic.Width/2,
        y1 + (int)(pic.Height * Math.Sin(radAngle)) );

            Point [] points;
           
            points = new Point[] {
                                        //new Point( x1, y1 ),
                                        upperLeft,
                                        upperRight,
                                        lowerLeft
                                };
           
            g.DrawImage(pic, points);
            //g.DrawImage(pic,x1,y1,x2,y2);

            label1.Text = string.Format("x,y:({0},{1}) - x,y:{2}", x1, y1, lowerLeft);
           
        }
       

Sådan som koden er her, der opfører billedet sig underligt. I dette tilfælde skulle den gerne lave en rotation på 50 grader omkring midten af bunden, men istedet for bliver billedet underligt skævt... og når man drejer den 0 grader eller 180 så vises billedet slet ikke.

Nu er det 3 år siden jeg har beskæftiget mig med noget matematik som kommer det her bare lidt nært, så håbede på lidt hjælp fra jer derude som har bedre "feeling" med den del.
Avatar billede plugin- Nybegynder
04. juli 2005 - 11:10 #1
////////////////KORTE VERSION////////////////////

          int x1 = 100;
            int y1 = 100;

            int degree = 50;
           
           
            double radAngle = ((degree / 180.0) * Math.PI);

    // Calculate lower left coordinate
    Point lowerLeft = new Point(
        x1 + (int)(0 * Math.Cos(radAngle)) - pic.Width/2,
        y1 + (int)(0 * Math.Sin(radAngle)));
           
           
    // Calculate upper right coordinate
    Point upperRight = new Point(
        x1 + (int)(pic.Height * Math.Cos(radAngle)) + pic.Width/2,
        y1 + (int)(pic.Height * Math.Sin(radAngle)));

    // Calculate upper left coordinate
    Point upperLeft = new Point(
        x1 + (int)(pic.Height * Math.Cos(radAngle)) - pic.Width/2,
        y1 + (int)(pic.Height * Math.Sin(radAngle)) );

            Point [] points;
           
            points = new Point[] {
                                       
                                        upperLeft,
                                        upperRight,
                                        lowerLeft
                                };

Hvordan skal jeg rette i denne kode for at få billedet til at dreje korrekt omkring (100,100) som vidst i højre side af billedet på: http://www.mpforge.info/temp/demo.jpg
Avatar billede plugin- Nybegynder
04. juli 2005 - 21:20 #2
fandt selv ud af det efter mange timers kiggeri - lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester