mirror of
https://github.com/CCLeonOS/LeonOS.git
synced 2026-03-03 06:47:00 +00:00
添加 LeonOS 的基本实现,包括: - 核心 API 模块(colors, disk, gps, keys, multishell, parallel, rednet, redstone, settings, vector) - 命令行程序(about, alias, bg, clear, copy, delete, edit, fg, help, list, lua, mkdir, move, paint, peripherals, programs, reboot, set, shutdown, threads) - 系统启动脚本和包管理 - 文档(README.md, LICENSE) - 开发工具(devbin)和更新程序 实现功能: - 完整的线程管理系统 - 兼容 ComputerCraft 的 API 设计 - 改进的 shell 和命令补全系统 - 多标签终端支持 - 设置管理系统
77 lines
1.6 KiB
Lua
77 lines
1.6 KiB
Lua
-- rc.vector
|
|
|
|
local vector = {}
|
|
local Vector = {}
|
|
|
|
function Vector:add(o)
|
|
return vector.new(self.x + o.x, self.y + o.y, self.z + o.z)
|
|
end
|
|
|
|
function Vector:sub(o)
|
|
return vector.new(self.x - o.x, self.y - o.y, self.z - o.z)
|
|
end
|
|
|
|
function Vector:mul(m)
|
|
return vector.new(self.x * m, self.y * m, self.z * m)
|
|
end
|
|
|
|
function Vector:div(m)
|
|
return vector.new(self.x / m, self.y / m, self.z / m)
|
|
end
|
|
|
|
function Vector:unm()
|
|
return vector.new(-self.x, -self.y, -self.z)
|
|
end
|
|
|
|
function Vector:dot(o)
|
|
return (self.x * o.x) + (self.y * o.y) + (self.z * o.z)
|
|
end
|
|
|
|
function Vector:cross(o)
|
|
return vector.new(
|
|
(self.y * o.z) - (self.z * o.y),
|
|
(self.z * o.x) - (self.x * o.z),
|
|
(self.x * o.y) - (self.y * o.x))
|
|
end
|
|
|
|
function Vector:length()
|
|
return math.sqrt((self.x * self.x) + (self.y * self.y) + (self.z * self.z))
|
|
end
|
|
|
|
function Vector:normalize()
|
|
return self:div(self:length())
|
|
end
|
|
|
|
function Vector:round(tolerance)
|
|
tolerance = tolerance or 1
|
|
local squared = tolerance * tolerance
|
|
return vector.new(
|
|
math.floor(self.x + (tolerance * 0.5)) / squared,
|
|
math.floor(self.y + (tolerance * 0.5)) / squared,
|
|
math.floor(self.z + (tolerance * 0.5)) / squared)
|
|
end
|
|
|
|
function Vector:tostring()
|
|
return string.format("%d,%d,%d", self.x, self.y, self.z)
|
|
end
|
|
|
|
function Vector:equals(o)
|
|
return self.x == o.x and self.y == o.y and self.z == o.z
|
|
end
|
|
|
|
Vector.eq = Vector.equals
|
|
|
|
local vect_mt = {
|
|
__index = Vector
|
|
}
|
|
|
|
for k, v in pairs(Vector) do
|
|
vect_mt["__"..k] = v
|
|
end
|
|
|
|
function vector.new(x, y, z)
|
|
return setmetatable({x = x or 0, y = y or 0, z = z or 0}, vect_mt)
|
|
end
|
|
|
|
return vector
|