local r = a*((math.sin(angle) * math.sqrt(math.abs(math.cos(angle)))) / (math.sin(angle) + 1.4142) - 2 * math.sin(angle) + 2)
local x = r * math.cos(angle) -- 计算对应的x值
local z = r * math.sin(angle) +1.5*a -
--曲线公式绘画
local function generateParabola()
local a = 10 -- 控制振幅(增加这个值会使波形更大)
local b = 0.9 -- 控制频率(增加这个值会使波形更密集)
local id = math.random(668, 681) -- 随机选择一个方块ID
local y = 8 -- 固定y坐标为8
local date = 0 -- 方块的时间戳
local step = 0.005 -- θ的步长,减小步长以增加分辨率
local maxR = 200 -- 设置r的最大值,即波形的最大半径
local blocksPerWait = 30 -- 每次等待前生成的方块数
local waitTime = 0.05 -- 每次生成后的等待时间
local theta = 0
local count = 0 -- 计数器,用于跟踪每次生成的方块数
-- 根据需要调整θ的遍历范围和步长
while true do
theta = theta + step
-- local r = a * math.sin(b * theta) -- 计算对应的r值
--local r = a * math.asin(math.tan(b * theta))
-- local r =a * math.cos(b * theta)+a * math.sin(b * theta)
--local r =a * math.cos(b * theta)*math.cos( theta)
-- local r =a * (math.sin(b * theta)*math.sin( theta))
-- local r =a * (math.cos(b * theta)*math.cos( theta))
--local r = a * math.sin(b * theta)
--local r = a * math.sin(b*theta) +b*math.sin(b*theta)
local angle=theta
local r = a*((math.sin(angle) * math.sqrt(math.abs(math.cos(angle)))) / (math.sin(angle) + 1.4142) - 2 * math.sin(angle) + 2)
if r > maxR then
break -- 如果r超过最大半径,则停止生成
end
local x = r * math.cos(theta) -- 计算对应的x值
local z = r * math.sin(theta) +1.5*a -- 计算对应的z值
-- 在计算出的位置放置方块
Block:setBlockAll(math.floor(x), y, math.floor(z), id, date)
count = count + 1 -- 增加计数器
-- 每生成10个方块后等待0.1秒
if count % blocksPerWait == 0 then
threadpool:wait(waitTime)
end
if math.floor(1000*angle) % 1256 == 0 then
id = math.random(668, 681) -- 随机选择一个方块ID
a=a+1
print(angle)
end
end
end
ScriptSupportEvent:registerEvent("Player.ClickBlock", generateParabola)
local r = a*((math.sin(angle) * math.sqrt(math.abs(math.cos(angle)))) / (math.sin(angle) + 1.4142) - 2 * math.sin(angle) + 2)
蝴蝶曲线公式
local r =a * (math.cos(b * theta)*math.cos( theta))
水平双球曲线公式
local r =a * math.cos(b * theta)*math.cos( theta)
反向双球曲线
local r =a * math.cos(b * theta)*math.sin( theta)