Вот вам заняться нечем, когда существуют готовые функции.
Код
--lua
local ffi = require("ffi")
log 'clear' log 'mode compact'
local WINDING = 2
ffi.cdef[[
typedef long LONG;
typedef int BOOL;
typedef void *HGDIOBJ;
typedef struct tagPOINT { LONG x; LONG y;} POINT, *PPOINT, *NPPOINT, *LPPOINT;
struct HRGN__ { int unused; }; typedef struct HRGN__ *HRGN;
BOOL PtInRegion(HRGN hrgn, int x, int y);
HRGN CreatePolygonRgn(const POINT *pptl, int cPoint, int iMode);
BOOL DeleteObject(HGDIOBJ ho);
]]
local rhomb = ffi.new('POINT[4]', {{50, 0}, {100, 50}, {50, 100}, {0, 50}}) -- координаты ромба
local region = ffi.C.CreatePolygonRgn(rhomb, 4, WINDING) -- создать регион из 4х точек
if tonumber(ffi.cast('int', region)) ~= 0 then -- если регион создался
local result = ffi.C.PtInRegion(region, 50, 70) -- входит ли точка в регион
log (result)
ffi.C.DeleteObject(ffi.cast('HGDIOBJ', region)) -- удалить регион
else
log ("Регион не создан")
end
Собственно можно любую фигуру создать и проверить входит ли точка в неё.