You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为直线添加z坐标生成正弦类曲线,生成包含首尾的指定数量采样点

你可以用余弦缓动插值实现需求,逻辑非常简单,无需复杂计算:

实现原理

你需要的首尾增长平缓、中间抬升快的S型曲线,可以通过半周期余弦映射实现:将原本0~1区间的线性比例值,代入公式 (1 - cos(线性比例 * π)) / 2 转换后,得到的缓动比例刚好符合两端变化速率为0、中间变化速率最高的特性,完全匹配你要的效果。

修改后代码

final double heightOfFirstCoordinate = 0;
final double heightOfLastCoordinate = 6;
final int n = 4;
final List<Double> collect = IntStream.range(0, n)
        .mapToObj(i -> {
            // 计算当前点的线性占比,取值范围0~1
            double linearRatio = (double) i / (n - 1);
            // 转换为缓动占比
            double easeRatio = (1 - Math.cos(linearRatio * Math.PI)) / 2;
            // 计算最终高度
            return heightOfFirstCoordinate + (heightOfLastCoordinate - heightOfFirstCoordinate) * easeRatio;
        })
        .collect(Collectors.toList());

补充说明

  • 如果业务场景中可能出现n=1的情况,可提前添加分支判断直接返回首坐标高度,避免除0异常。
  • 若需要调整曲线陡峭程度,可替换为其他幂次缓动函数,当前方案是实现成本最低、计算量最小的选择。

内容的提问来源于stack exchange,提问作者user1298426

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:54:05