#game #curve #3d #graphics

fastcurve_3d

Library for 3D and 2D fast curve generation

2 releases

0.1.1 May 24, 2020
0.1.0 May 14, 2020

#147 in Robotics

Download history 437/week @ 2024-07-23 467/week @ 2024-07-30 439/week @ 2024-08-06 247/week @ 2024-08-13 177/week @ 2024-08-20 281/week @ 2024-08-27 320/week @ 2024-09-03 217/week @ 2024-09-10 235/week @ 2024-09-17 190/week @ 2024-09-24 307/week @ 2024-10-01 400/week @ 2024-10-08 413/week @ 2024-10-15 275/week @ 2024-10-22 329/week @ 2024-10-29 390/week @ 2024-11-05

1,488 downloads per month

Custom license

33KB
114 lines

Rust Fast Curve 3d

crates.io Rust License codecov

This algorithm is generates a curve from a list of control points.

References:

Original paper: G. M. Chaikin, “An algorithm for high-speed curve generation, Computer Graphics and Image Processing,” vol. 3, 1974, pp. 346-349 On Chaikin's algorithm R.F.Riesenfeld

The library contains the following functions:

  • fast_curve_2d for generating curves in 2D.
  • fast_curve_3d for generating curves in 3D.

Examples:

For the examples the rust gnuplot library is used.

3d curve generation

    let x = vec![1.0,1.0,4.0,5.0,2.0];
    let y = vec![1.0,2.0,0.5,1.0,2.0];
    let z = vec![1.0,2.0,0.8,1.0,1.5];
    let n: u8 = 4;

    let (xn,yn,zn) = fast_curve_3d(&x, &y, &z, n);

    // gnu plot Figure
    let mut fg = Figure::new();
    fg.axes3d()
    .lines(&x, &y, &z,&[Caption("Original"), Color("blue")])
    .lines(&xn, &yn, &zn, &[Caption("Smoothed"), Color("red")]);
    fg.set_scale(1.0, 1.0);
    fg.show().unwrap();

alt text

2d curve generation

    let x = vec![1.0,1.0,4.0,5.0,2.0];
    let y = vec![1.0,2.0,0.5,1.0,2.0];
    let n: u8 = 4;

     let (xn,yn) = fast_curve_2d(&x, &y, n);


    let mut fg = Figure::new();
    fg.axes2d()
    .lines(&x, &y,&[Caption("Original"), Color("blue")])
    .lines(&xn, &yn, &[Caption("Smoothed"), Color("red")]);
    
    fg.set_scale(1.0, 1.0);
    fg.show().unwrap();

alt text

No runtime deps