|
发表于 2025-1-11 13:00:30
|
显示全部楼层
广西壮族自治区崇左市
要计算出距离(100, 200)最近的坐标,我们需要利用距离公式
(
x
2
−
x
1
)
2
+
(
y
2
−
y
1
)
2
(x2−x1)2+(y2−y1)2 来计算候选坐标点与当前位置的距离,并找出最小距离对应的点。
以下是改写并添加计算最近点的代码实现:
lua
复制代码
local myX = 100
local myY = 200 -- 自己的位置坐标
local lastX = nil
local lastY = nil
local closestDistance = math.huge -- 初始化为一个极大的数值
local arr = findPicAllPoint(0, 0, 1280, 768, "boss1.png|boss2.png", 0.85)
if arr ~= nil then
for n = 1, #arr do
local posX = arr[n].x
local posY = arr[n].y
print("posXY:", posX, posY) -- 打印出所有BOSS的坐标
-- 计算该坐标与自己的坐标之间的距离
local distance = math.sqrt((posX - myX) ^ 2 + (posY - myY) ^ 2)
-- 判断是否是距离最近的点
if distance < closestDistance then
closestDistance = distance -- 更新最近距离
lastX = posX
lastY = posY -- 更新最近坐标
end
end
end
-- 打印出距离自己最近的点
if lastX and lastY then
print("Closest position:", lastX, lastY)
else
print("No BOSS points found")
end
代码实现步骤:
初始化变量:
myX 和 myY 是自己的坐标。
lastX 和 lastY 用于存储最近点的坐标,初始为 nil。
closestDistance 初始化为一个极大的数值(math.huge 用于确保初次比较时任何距离都能覆盖)。
遍历所有点:
使用循环遍历 findPicAllPoint 返回的数组 arr,逐一取出点的坐标 posX 和 posY。
计算距离:
使用欧几里得公式计算 arr[n] 点与 (myX, myY) 的距离。
更新最近坐标:
如果当前距离比 closestDistance 小,更新最近距离,并记录当前坐标为最近点。
输出结果:
循环结束后,若找到了坐标,打印距离最近的坐标点;否则,提示未找到坐标点。
示例输出:
假设 findPicAllPoint 返回以下坐标:
(110, 210)
(300, 400)
(120, 190)
下面是打印结果:
复制代码
posXY: 110 210
posXY: 300 400
posXY: 120 190
Closest position: 110 210
在此场景中,点 (110, 210) 是距离 (100, 200) 最近的点,结果打印它的坐标。 |
|