Draw the tube better
This commit is contained in:
parent
df2134a8a5
commit
7b90bbac65
10
Cargo.lock
generated
10
Cargo.lock
generated
|
|
@ -1721,6 +1721,15 @@ dependencies = [
|
||||||
"either",
|
"either",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itertools"
|
||||||
|
version = "0.13.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186"
|
||||||
|
dependencies = [
|
||||||
|
"either",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itertools-num"
|
name = "itertools-num"
|
||||||
version = "0.1.3"
|
version = "0.1.3"
|
||||||
|
|
@ -3101,6 +3110,7 @@ dependencies = [
|
||||||
"flo_draw",
|
"flo_draw",
|
||||||
"glam 0.27.0",
|
"glam 0.27.0",
|
||||||
"glium",
|
"glium",
|
||||||
|
"itertools 0.13.0",
|
||||||
"itertools-num",
|
"itertools-num",
|
||||||
"rand",
|
"rand",
|
||||||
"rand_pcg",
|
"rand_pcg",
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ flo_canvas = "0.3.1"
|
||||||
itertools-num = "0.1.3"
|
itertools-num = "0.1.3"
|
||||||
glium = "0.35.0"
|
glium = "0.35.0"
|
||||||
winit = "0.30.5"
|
winit = "0.30.5"
|
||||||
|
itertools = "0.13.0"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
approx = "0.5.1"
|
approx = "0.5.1"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
use glam::*;
|
use glam::*;
|
||||||
|
use itertools::{chain, iproduct};
|
||||||
|
|
||||||
use refraction::ifaces::{DebugTraceable, Traceable};
|
use refraction::ifaces::{DebugTraceable, Traceable};
|
||||||
use refraction::tube::metric::Tube;
|
use refraction::tube::metric::Tube;
|
||||||
|
|
@ -30,6 +31,18 @@ fn draw_rect(center: Vec3, u: Vec3, v: Vec3) -> Line {
|
||||||
])
|
])
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn draw_ellipse(center: Vec3, u: Vec3, v: Vec3) -> Line {
|
||||||
|
let segments = 47;
|
||||||
|
let step = 2. * std::f32::consts::PI / segments as f32;
|
||||||
|
Line::Loop(
|
||||||
|
(0..segments)
|
||||||
|
.map(|k| k as f32 * step)
|
||||||
|
.map(Vec2::from_angle)
|
||||||
|
.map(|d| center + d.x * u + d.y * v)
|
||||||
|
.collect(),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
pub fn build() -> Vec<FancyLine> {
|
pub fn build() -> Vec<FancyLine> {
|
||||||
let tube = Tube {
|
let tube = Tube {
|
||||||
inner_radius: 30.0,
|
inner_radius: 30.0,
|
||||||
|
|
@ -113,17 +126,18 @@ trait Renderable {
|
||||||
|
|
||||||
impl Renderable for Tube {
|
impl Renderable for Tube {
|
||||||
fn render(&self) -> Vec<Line> {
|
fn render(&self) -> Vec<Line> {
|
||||||
vec![
|
let lines = 17;
|
||||||
draw_rect(
|
let step = 2. * std::f32::consts::PI / lines as f32;
|
||||||
vec3(0., 0., 0.),
|
let r = 0.5 * (self.outer_radius + self.inner_radius);
|
||||||
vec3(self.outer_radius, 0., 0.),
|
let w = 0.5 * (self.outer_radius - self.inner_radius);
|
||||||
vec3(0., self.external_halflength, 0.),
|
let l = vec3(0., self.external_halflength, 0.);
|
||||||
),
|
let along = (0..lines)
|
||||||
draw_rect(
|
.map(|k| k as f32 * step)
|
||||||
vec3(0., 0., 0.),
|
.map(Vec2::from_angle)
|
||||||
vec3(self.inner_radius, 0., 0.),
|
.map(|d| vec3(d.x, 0., d.y))
|
||||||
vec3(0., self.external_halflength, 0.),
|
.map(|d| draw_rect(r * d, w * d, l));
|
||||||
),
|
let caps = iproduct!([self.inner_radius, self.outer_radius], [-l, l])
|
||||||
]
|
.map(|(r, l)| draw_ellipse(l, vec3(r, 0., 0.), vec3(0., 0., r)));
|
||||||
|
chain!(along, caps).collect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user