2016-05-20 7 views
-1

Ich habe einWie müssen sich X und Y des Rechtecks ​​ändern, damit das Zentrum am selben Ort bleibt?

Rectangle rect = new Rectangle(
    (int)(someArray[z].rectangleObject.X + 
    ((double)widthOfCell/2) - 
    ((double)targetWidth/2)), 

    (int)(someArray[z].rectangleObject.Y + 
    (double)(heightOfCell/2) - 
    (double)(targetHeight/2)), 

    targetWidth, 

    targetHeight); 

Wenn targetWidth und targetHeight Anstieg um 20 Prozent, das heißt

targetWidth *= 1.2 
targetHeight *= 1.2 

Wie funktioniert

(int)(someArray[z].rectangleObject.X + 
    ((double)widthOfCell/2) - ((double)targetWidth/2)) 

und

(int)(someArray[z].rectangleObject.Y + 
    (double)(heightOfCell/2) - (double)(targetHeight/2)) 

müssen sich ändern, damit das Zentrum am selben Ort bleibt?

Beachten Sie, dass ich keine der anderen Werte in der Berechnung ändere. someArray[z].rectangleObject.X, someArray[z].rectangleObject.Y, widthOfCell und heightOfCell bleiben alle gleich.

+0

@Steve ja, aber es ist keine Hausaufgabenfrage. –

+0

@ 4castle engified –

+0

@PeterDuniho Das war die Lösung. –

Antwort

0

Die Formeln, die Sie zum Berechnen von X und Y für die Position verwenden, scheinen bereits jeden Ausdruck zu enthalten, der zum Berechnen der Mitte des Rechtecks ​​benötigt wird. I.e.

(int)(someArray[z].rectangleObject.X + ((double)widthOfCell/2) 

und

(int)(someArray[z].rectangleObject.Y + (double)(heightOfCell/2) 

für die X- und Y von der Mitte auf.

Diese Formeln subtrahieren die Hälfte der Breite und Höhe des Rechtecks, um die tatsächliche Position für das Rechteck zu erzeugen.

Wenn Sie nur die Breite und Höhe ändern, bleibt der berechnete Wert der beiden obigen Ausdrücke gleich, und somit bleibt auch der Mittelpunkt des berechneten Rechtecks ​​gleich.

Mit anderen Worten, wenn Sie nur die Breite und die Höhe des Rechtecks ​​ändern, müssen Sie nur die gesamten Standorterklärungen berechnen, die Sie bereits haben. Ihr ursprünglicher Code, um das Rechteck Arbeiten zu diesem Zweck zu berechnen:

Rectangle rect = new Rectangle(
    (int)(someArray[z].rectangleObject.X + ((double)widthOfCell/2) - 
     ((double)targetWidth/2)), 
    (int)(someArray[z].rectangleObject.Y + (double)(heightOfCell/2) - 
     (double)(targetHeight/2)), 
    targetWidth, 
    targetHeight); 

Basierend auf your comment, es scheint, dass dies in der Tat Ihre Frage beantworten.