alexprey, ну можно, но ориентироваться в функции будет сложнее
Так
function IsCoordsIn4Gon takes real x, real y, real rx1, real ry1, real rx2, real ry2, real rx3, real ry3, real rx4, real ry4 returns boolean
local real array dist
local boolean b = false
set dist[1] = SquareRoot((rx1-rx2)*(rx1-rx2)+(ry1-ry2)*(ry1-ry2))
set dist[2] = SquareRoot((rx2-rx3)*(rx2-rx3)+(ry2-ry3)*(ry2-ry3))
set dist[3] = SquareRoot((rx3-rx4)*(rx3-rx4)+(ry3-ry4)*(ry3-ry4))
set dist[4] = SquareRoot((rx4-rx1)*(rx4-rx1)+(ry4-ry1)*(ry4-ry1))
set dist[5] = SquareRoot((rx1-rx3)*(rx1-rx3)+(ry1-ry3)*(ry1-ry3))
set dist[6] = SquareRoot((x-rx1)*(x-rx1)+(y-ry1)*(y-ry1))
set dist[7] = SquareRoot((x-rx2)*(x-rx2)+(y-ry2)*(y-ry2))
set dist[8] = SquareRoot((x-rx3)*(x-rx3)+(y-ry3)*(y-ry3))
if (dist[6]<=dist[1]) and (dist[6]<=dist[5]) and (dist[7]<=dist[1]) and (dist[7]<=dist[2]) and (dist[8]<=dist[2]) and (dist[8]<=dist[5]) then
set b = true
else
set dist[7] = SquareRoot((x-rx4)*(x-rx4)+(y-ry4)*(y-ry4))
if (dist[6]<=dist[1]) and (dist[6]<=dist[5]) and (dist[7]<=dist[1]) and (dist[7]<=dist[2]) and (dist[8]<=dist[2]) and (dist[8]<=dist[5]) then
set b = true
endif
endif
return b
endfunction
Можно выпилить dx с dy и вставить действия напрямую
Так
function IsCoordsIn4Gon takes real x, real y, real rx1, real ry1, real rx2, real ry2, real rx3, real ry3, real rx4, real ry4 returns boolean
local real dist1
local real dist2
local real dist3
local real dist4
local real distS
local real distR1
local real distR2
local real distR3
local boolean b = false
set dist1 = SquareRoot((rx1-rx2)*(rx1-rx2)+(ry1-ry2)*(ry1-ry2))
set dist2 = SquareRoot((rx2-rx3)*(rx2-rx3)+(ry2-ry3)*(ry2-ry3))
set dist3 = SquareRoot((rx3-rx4)*(rx3-rx4)+(ry3-ry4)*(ry3-ry4))
set dist4 = SquareRoot((rx4-rx1)*(rx4-rx1)+(ry4-ry1)*(ry4-ry1))
set distS = SquareRoot((rx1-rx3)*(rx1-rx3)+(ry1-ry3)*(ry1-ry3))
set distR1 = SquareRoot((x-rx1)*(x-rx1)+(y-ry1)*(y-ry1))
set distR2 = SquareRoot((x-rx2)*(x-rx2)+(y-ry2)*(y-ry2))
set distR3 = SquareRoot((x-rx3)*(x-rx3)+(y-ry3)*(y-ry3))
if (distR1<=dist1) and (distR1<=distS) and (distR2<=dist1) and (distR2<=dist2) and (distR3<=dist2) and (distR3<=distS) then
set b = true
else
set distR2 = SquareRoot((x-rx4)*(x-rx4)+(y-ry4)*(y-ry4))
if (distR1<=dist1) and (distR1<=distS) and (distR2<=dist1) and (distR2<=dist2) and (distR3<=dist2) and (distR3<=distS) then
set b = true
endif
endif
return b
endfunction
Функция вычисляет, принадлежат ли координаты (x,y) четырёхугольнику с вершинами: (rx1,ry1);(rx2,ry2);(rx3,ry3);(rx4,ry4).
Вершины вводить по порядку, т.е. не допускать "перекрутки" фигуры.
Код
function IsCoordsIn4Gon takes real x, real y, real rx1, real ry1, real rx2, real ry2, real rx3, real ry3, real rx4, real ry4, returns boolean
local real dx
local real dy
local real dist1
local real dist2
local real dist3
local real dist4
local real distS
local real distR1
local real distR2
local real distR3
local boolean b = false
set dx = rx1-rx2
set dy = ry1-ry2
set dist1 = SquareRoot(dx*dx+dy*dy)
set dx = rx2-rx3
set dy = ry2-ry3
set dist2 = SquareRoot(dx*dx+dy*dy)
set dx = rx3-rx4
set dy = ry3-ry4
set dist3 = SquareRoot(dx*dx+dy*dy)
set dx = rx4-rx1
set dy = ry4-ry1
set dist4 = SquareRoot(dx*dx+dy*dy)
set dx = rx1-rx3
set dy = ry1-ry3
set distS = SquareRoot(dx*dx+dy*dy)
set dx = x-rx1
set dy = y-ry1
set distR1 = SquareRoot(dx*dx+dy*dy)
set dx = x-rx2
set dy = y-ry2
set distR2 = SquareRoot(dx*dx+dy*dy)
set dx = x-rx3
set dy = y-ry3
set distR3 = SquareRoot(dx*dx+dy*dy)
if (distR1<=dist1) and (distR1<=distS) and (distR2<=dist1) and (distR2<=dist2) and (distR3<=dist2) and (distR3<=distS) then
set b = true
else
set dx = x-rx4
set dy = y-ry4
set distR2 = SquareRoot(dx*dx+dy*dy)
if (distR1<=dist1) and (distR1<=distS) and (distR2<=dist1) and (distR2<=dist2) and (distR3<=dist2) and (distR3<=distS) then
set b = true
endif
endif
return b
endfunction
» WarCraft 3 / BlizzCon не будет в этом году
» STALKER 2 / S.T.A.L.K.E.R. 2 выйдет, но не в этом году
» WarCraft 3 / AoE 3 .br2 to .obj
» STALKER 2 / Создание нового игрового персонажа (Урок 1)
» StarCraft / Blizzard Dota
Вроде бы - не аргумент.
Торнак такой торнак ©
Про оформление вообще молчу.
Ред. Hanabishi
» WarCraft 3 / Наработки
И опять же уже было.
» Minecraft / Скины в Minecraft
» Прочее / Рецензия Alice Madness Returns
» Diablo / Никаких модов в Diablo 3
А ещё они запрещают качать игру с торрентов и пользоваться кряком=)
» WarCraft 3 / cJass - дополнение к языку JASS
Ругается на
» WarCraft 3 / cJass 1.4.0.2 Manual
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
Кстати нашёл ошибку, исправил.
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
» WarCraft 3 / Библиотека функций
Вершины вводить по порядку, т.е. не допускать "перекрутки" фигуры.
» WarCraft 3 / cJass - дополнение к языку JASS
» StarCraft 2 / Официальная информация о Heart of the Swarm
» Half-Life / Конкурс пользовательских карт Portal 2