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

如何在nalgebra中对两点取平均值?如何用边中点生成三角形?

嘿,我来帮你解决这两个nalgebra相关的问题,都是关于点的中点计算的,刚好关联度很高!

问题1:如何在nalgebra中对两个点取平均值?

nalgebra的设计严格遵循了几何数学定义:点(Point)代表空间中的固定位置,而向量(Vector)代表位置之间的位移——所以直接让两个点相加是不符合逻辑的(你没法把两个“位置”直接加起来呀)。要计算两个点的平均值(也就是中点),有两种简单可行的方式:

  • 方式一:手动转换坐标
    把点通过.coords属性转换成对应的向量,完成加法和除法运算后,再转回Point类型:
use nalgebra::Point2;

let a = Point2::new(1.0, 2.0);
let b = Point2::new(3.0, 4.0);
let midpoint = Point2::from((a.coords + b.coords) / 2.0);
  • 方式二:使用内置的midpoint方法
    nalgebra已经为Point类型实现了Midpoint trait,直接调用就能一键得到中点,代码更简洁:
let midpoint = a.midpoint(&b);

这个方法内部已经帮你处理了坐标转换的细节,可读性拉满~


问题2:修复生成中点三角形的报错代码

你的代码报错的核心原因就是刚才说的:nalgebra不允许直接对Point2实例执行加法操作。我们可以用上面的两种方法来修改代码,这里推荐用内置的midpoint方法,代码更清晰直观:

修复后的完整代码

use nalgebra::Point2;

fn get_def(a: Point2<f32>, b: Point2<f32>, c: Point2<f32>) -> [Point2<f32>; 3] {
    let d = a.midpoint(&b);
    let e = b.midpoint(&c);
    let f = c.midpoint(&a);
    [d, e, f]
}

如果你更倾向于手动控制坐标运算的过程,也可以写成下面这种形式:

use nalgebra::Point2;

fn get_def(a: Point2<f32>, b: Point2<f32>, c: Point2<f32>) -> [Point2<f32>; 3] {
    let d = Point2::from((a.coords + b.coords) / 2.0);
    let e = Point2::from((b.coords + c.coords) / 2.0);
    let f = Point2::from((c.coords + a.coords) / 2.0);
    [d, e, f]
}

两种写法都能正常编译运行,选你觉得更顺手的就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:02:49