スポンサーリンク

Open3D の LineSetの使用例

#include <open3d/Open3D.h>
#include <Eigen/Dense>
#include <vector>
#include <cmath>
#include <memory>

#pragma comment(lib, "opengl32.lib")
#pragma comment(lib, "glew32s.lib")

using namespace open3d;
 
std::shared_ptr<geometry::LineSet> MakePolyline() {

    const double x0 = -2.0 * 3.14159;
    const double x1 = 2.0 * 3.14159;
    const double amplitude = 1.0; // 振幅
    const double frequency = 1.0; // 周波数
    const double phase = 1.0;     // 位相
    const int samples = 400;

    /////////////////////////////////////////////////////////
    auto lineset = std::make_shared<geometry::LineSet>();
    
    // 頂点作成
    const double step = (x1 - x0) / (samples - 1);
    for (int i = 0; i < samples; ++i) {
        double x = x0 + step * i;
        double y = amplitude * std::sin(frequency * x + phase);

        lineset->points_.emplace_back(Eigen::Vector3d(x, y, 0.0));
    }

    /////////////////////////////////////////////////////////

    // 頂点インデックスの組み合わせで線分を作成
    for (size_t i = 0; i < samples-1; ++i){
        lineset->lines_.emplace_back(
            (int)i, 
            (int)(i + 1)
        );
        // 線分に対する色を設定
        lineset->colors_.emplace_back(Eigen::Vector3d(1.0, i/float(samples), 0.0));
    }

    return lineset;
}

int
main() { auto sine_ls = MakePolyline(); visualization::Visualizer vis; vis.CreateVisualizerWindow("LineSet", 800, 600); vis.AddGeometry(sine_ls); auto& opt = vis.GetRenderOption(); opt.line_width_ = 2.0; opt.background_color_ = { 0, 0, 0 }; vis.Run(); vis.DestroyVisualizerWindow(); return 0; }

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: