2013-04-02, 14:44
  #1
Medlem
Behöver lite algoritm hjälp. Ska översätta en metod från C#, dock fastnar jag på ett ställe. Här är hela metoden:
Kod:
        static bool IntersectPixels(Rectangle rectangleA, Color[] dataA,
                                    Rectangle rectangleB, Color[] dataB)
        {
            // Find the bounds of the rectangle intersection
            int top = Math.Max(rectangleA.Top, rectangleB.Top);
            int bottom = Math.Min(rectangleA.Bottom, rectangleB.Bottom);
            int left = Math.Max(rectangleA.Left, rectangleB.Left);
            int right = Math.Min(rectangleA.Right, rectangleB.Right);

            // Check every point within the intersection bounds
            for (int y = top; y < bottom; y++)
            {
                for (int x = left; x < right; x++)
                {
                    // Get the color of both pixels at this point
                    Color colorA = dataA[(x - rectangleA.Left) + (y - rectangleA.Top) * rectangleA.Width];
                    Color colorB = dataB[(x - rectangleB.Left) + (y - rectangleB.Top) * rectangleB.Width];

                    // If both pixels are not completely transparent,
                    if (colorA.A != 0 && colorB.A != 0)
                    {
                        // then an intersection has been found
                        return true;
                    }
                }
            }

            // No intersection found
            return false;
        }

Skapandet av variablerna colorA och colorB förvirrar mig. I mitt spel lagras färgerna i en 2d array: int[bredd][höjd]. Hur löser jag detta?
Citera
2013-04-02, 15:09
  #2
Medlem
gadzooxs avatar
Litet exempel för att leda in dig på rätt tankebanor:
(fetstilen i arrayerna är bara för att visualisera raderna lite tydligare, inget annat).

Du lagrar dina färger i en 2d-array, såhär:
Kod:
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55
Kod:
Color c1 colors[x][y];

// Läsa färgen på x=2, y=3:
Color c1 colors[2][3];  // = 43 

I exemplet lagrar de färger i en 1d-array såhär:
Kod:
11 12 13 14 15 21 22 23 24 25 31 32 33 34 35 41 42 43 44 45 51 52 53 54 55
Kod:
int offset y*RowLength x;
Color c2 colors[offset];

// Läsa färgen på x=2, y=3:
int offset x;  // 3*5 + 2 = 17
Color c2 colors[17];  // = 43 
Citera
2013-04-02, 15:18
  #3
Medlem
boppaloozs avatar
Det verkar som att färgerna ligger lagrade i en array, punkt för punkt rad för rad. Först i arrayen kommer allstå första raden, där y - rectangleA.Top=0. Sen kommer nästa rad, där y-... = 1, osv. y*rectangleA.Width är offseten från början av arrayen som man lägger till x innan dom packas in i arrayen.
Det hela tycker jag känns lite osäkert, om det nu är att avgöra ifall två rektanglar helt eller delvis ligger på varandra ("interects") eftersom det förutsätts att color-arrayen har fyllts i korrekt på något annat ställe i programmet. Jag undrar om det inte finns någon standardrutin man skulle kunna använda för ändamålet, typ

bool intersects(Rectangle rectangleA, Rectangle rectangleB)

som alltså enbart går på respektive rektangels koordinater.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in