Тема: AHK: Вписать один прямоугольник в другой
Нужно в центр красного прямоугольника "вписать" желтый прямоугольник, с сохранением соотношения его сторон, заняв в красном максимальную площадь, например как видео в окне плеера при его растягивании. Пока не начал писать, но думается не лучший алгоритм у меня получится.
Предлагайте свои варианты, или может такое есть в WinApi.
#SingleInstance Force
#NoEnv
ListLines Off
SetBatchLines -1
AreaWidth := 800
AreaHeight := 800
ChildWidthOriginal := 1000
ChildHeightOriginal := 500
Gui, +HWNDhGui -DPIScale -Caption
Gui, Show, Na y100 w%AreaWidth% h%AreaHeight%
Gui, New
Gui, +HWNDhParent -DPIScale -Caption +Parent%hGui%
Gui, Color, Red
Gui, Show, Na
Gui, New
Gui, +HWNDhChild -DPIScale -Caption +Parent%hGui%
Gui, Color, Yellow
Gui, Show, Na
Loop
{
ParentWidth := Random(200, AreaWidth - 200)
ParentHeight := Random(200, AreaHeight - 200)
StretchToFit(ParentWidth, ParentHeight, ChildWidthOriginal, ChildHeightOriginal, ChildX, ChildY, ChildWidth, ChildHeight)
; красный прямоугольник
Gui, %hParent%:Show, % "NA x" 100 " y" 100 " w" ParentWidth " h" ParentHeight
; желтый прямоугольник
Gui, %hChild%:Show, % "NA x" 100 + ChildX " y" 100 + ChildY " w" ChildWidth " h" ChildHeight
MsgBox, 4096, ,
}
Return
StretchToFit(ParentWidth, ParentHeight, ChildWidthOriginal, ChildHeightOriginal, ByRef ChildX, ByRef ChildY, ByRef ChildWidth, ByRef ChildHeight) {
ParentRatioW := ParentWidth / ParentHeight
ChildRatioW := ChildWidthOriginal / ChildHeightOriginal
ParentRatioH := ParentHeight / ParentWidth
ChildRatioH := ChildHeightOriginal / ChildWidthOriginal
ChildWidth := ParentRatioW < ChildRatioW ? ParentWidth : ParentWidth * (ChildRatioW / ParentRatioW)
ChildHeight := ParentRatioH < ChildRatioH ? ParentHeight : ParentHeight * (ChildRatioH / ParentRatioH)
ChildX := (ParentWidth - ChildWidth) / 2
ChildY := (ParentHeight - ChildHeight) / 2
}
Random(min, max) {
Random, rand, min, max
Return rand
}
GuiEscape:
GuiClose:
Escape:: ExitApp
ChildWidthOriginal := 1000
ChildHeightOriginal := 500Задаются изначальные размеры желтого прямоугольника, для последующего получения соотношения его сторон.
Win10x64 AhkSpy, Hotkey, ClockGui

