2016-05-20 6 views
-1

У меня естьКак X и Y прямоугольника должны измениться, чтобы центр остался в одном месте?

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); 

Если targetWidth и targetHeight увеличение на 20 процентов, то есть

targetWidth *= 1.2 
targetHeight *= 1.2 

Как

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

и

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

должны измениться, чтобы центр остался на том же месте?

Обратите внимание, что я не изменяю никакие другие значения в расчете. someArray[z].rectangleObject.X, someArray[z].rectangleObject.Y, widthOfCell и heightOfCell все не меняется.

+0

@Steve да, но это не вопрос домашней работы. –

+0

@ 4castle englified –

+0

@PeterDuniho Это было решением. –

ответ

0

Формулы, которые вы используете для вычисления X и Y для местоположения, как представляется, уже содержат каждое выражение, необходимое для вычисления центра прямоугольника. То есть

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

и

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

для X и Y центра, соответственно.

Эти формулы продолжаются, чтобы вычесть половину ширины и высоты прямоугольника, чтобы создать фактическое местоположение для прямоугольника.

Если вы меняете только ширину и высоту, вычисленное значение двух вышеуказанных выражений останется неизменным, и поэтому центр вычисленного прямоугольника останется таким же.

Другими словами, если все, что вы меняете, это ширина и высота прямоугольника, все, что вам нужно сделать, это рассчитать все выражения местоположения, которые у вас уже есть. Ваш исходный код, чтобы вычислить прямоугольник работы для этой цели:

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); 

на основе your comment, кажется, что это делает на самом деле Ваш вопрос.