2015-01-13 1 views
0

Я не смог установить действительно надежный код, чтобы центрировать прямоугольник в другом прямоугольнике.Центральный прямоугольник в другом прямоугольнике

Я хотел бы, чтобы центральная точка «RectangleToCenter» соответствовала центральной точке «SourceRectangle». Не требуется масштабирование.

Моя текущая попытка

Public Sub CenterRect(ByVal uMain As Rectangle, ByRef uRectToCenter As Rectangle) 

    Dim iAVHeightHalf As Integer = uMain.Height/2 'src y center 
    Dim iAVWidthHalf As Integer = uMain.Width/2 'src x center 

    Dim iStartDestX As Integer = uMain.Left + (uRectToCenter.Width/2) - iAVWidthHalf 
    Dim iStartDestY As Integer = uMain.Top + (uRectToCenter.Height/2) - iAVHeightHalf 

    Dim nNewStart As New Point(iStartDestX, iStartDestY) 

    uRectToCenter.Location = nNewStart 

End Sub 

Но это не выглядит чистым для меня.

+1

Код не выглядит чистым, или результат не тот, что вы хотите? – Mathemats

ответ

2

Если первый прямоугольник имеет координаты (x1, y1), ширину (W1), а высота (h1), второй прямоугольник должен выглядеть так:

w2 = //whatever you want the width to be 
h2 = //whatever you want the height to be 
x2 = x1 + ((w1 - w2)/2); 
y2 = y1 + ((h1 - h2)/2); 

Надеюсь, этот псевдокод помогает. Это в основном математический вопрос.

0
objSmall.X = CInt(objBig.X + (Math.Round(((objBig.Width/2) - (objSmall.Width/2)), 0))) 
    objSmall.Y = CInt(objBig.Y + (Math.Round(((objBig.Height/2) - (objSmall.Height/2)), 0))) 
+0

Не учитывает ли это только ширину и высоту, а не местоположение объекта на экране? –

+0

Да, спасибо. Ред. – N0Alias