nalgebra の Point や Vector を nannou の Point や Vector に変換する

nannou は cgmath というライブラリを使っていますが、 nalgebra の方が人気でドキュメントが多いのでそっちから入門するのが楽そうです。しかし、 nalgebra と cgmath は当然使ってる型が違うのでなんらかの変換が必要になります。どちらも内部的には array なので、それを取り出して型だけ変換すればいいみたいです。

Vectorの方は単純にこんな感じでいけました。

    let v_na = nalgebra::Vector3::new(1.0, 1.0, 1.0);
    let v_array: [f32; 3] = v_na.into();
    let v: nannou::geom::Vector3 = v_array.into();

一方で、Point も同じ感じでできるかとおもいきやこれはエラーになります。

    let p_na = nalgebra::Point3::new(1.0, 1.0, 1.0);
    let p_array: [f32; 3] = p_na.into();
    let p: nannou::geom::Point3 = p_array.into();

これはコード自動生成がうまくいってないせいらしいんですが、ちょっとissueを読んでもよくわかりませんでした。

なのでこんな感じで、原点からのベクトルに直すと変換できるようになります(が、もっといい方法あるんでしょうか...?)

    let p_na = nalgebra::Point3::new(1.0, 1.0, 1.0);
    let v_array: [f32; 3] = (p_na  - nalgebra::Point3::origin()).into();
    let v: nannou::geom::Vector3 = v_array.into();