Struct charred_path::piecewise_linear::PuncturePoint
source · pub struct PuncturePoint { /* private fields */ }Expand description
PuncturePoint represents a hole in the plane from the perspective of homotopy.
A PuncturePoint is a point in the plane that acts as a puncture or hole, affecting the homotopy type
of paths traveling around it.
Each PuncturePoint contains a position which is a Vec2 representing the position of the point,
and a name which is a char that uniquely identifies the puncture point. It is used to represent
the traversal around the puncture point when writing the homotopy type of a path. name.to_ascii_lowercase()
is used to represent clockwise traversal around the puncture point, and name.to_ascii_uppercase() is used
to represent counterclockwise traversal.
Note that the name character is made uppercase upon instantiation.
§Examples
use bevy::prelude::*;
use charred_path::piecewise_linear::PuncturePoint;
let position = Vec2::new(1.0, 2.0);
let puncture_point = PuncturePoint::new(position, 'a');
assert_eq!(puncture_point.position(), &position);
assert_eq!(puncture_point.name(), 'A');Implementations§
source§impl PuncturePoint
impl PuncturePoint
sourcepub const fn new(position: Vec2, name: char) -> Self
pub const fn new(position: Vec2, name: char) -> Self
Represents a puncture point in the plane.
Examples found in repository?
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
fn init(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>,
) {
// spawn the camera
commands.spawn(Camera2dBundle::default());
// Define some puncture points
let puncture_points = vec![
PuncturePoint::new(Vec2::new(-225.0, 100.0), 'A'),
PuncturePoint::new(Vec2::new(-75.0, 150.0), 'B'),
PuncturePoint::new(Vec2::new(75.0, 150.0), 'C'),
PuncturePoint::new(Vec2::new(225.0, 100.0), 'D'),
];
// Render puncture points as red circles
let radius = 5.0;
let material = materials.add(ColorMaterial::from(Color::RED));
for point in puncture_points.iter() {
commands.spawn(MaterialMesh2dBundle {
mesh: meshes.add(Circle::new(radius)).into(),
material: material.clone(),
transform: Transform::from_translation(point.position().extend(0.0)),
..Default::default()
});
}
// spawn the player
commands.spawn((
Player,
MaterialMesh2dBundle {
mesh: meshes.add(Circle::new(10.0)).into(),
material: materials.add(PLAYER_COLOR),
transform: Transform::from_translation(PLAYER_START),
..Default::default()
},
PathType::new(PLAYER_START.truncate(), puncture_points),
));
// spawn the text
commands.spawn((
TextBundle::from_section(
"default",
TextStyle {
font_size: 60.0,
..Default::default()
},
)
.with_text_justify(JustifyText::Center)
.with_style(Style {
position_type: PositionType::Absolute,
bottom: Val::Px(5.0),
right: Val::Px(5.0),
..Default::default()
}),
HomotopyWordText,
));
}sourcepub const fn position(&self) -> &Vec2
pub const fn position(&self) -> &Vec2
Returns the position of the puncture point in 2D.
Examples found in repository?
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
fn init(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>,
) {
// spawn the camera
commands.spawn(Camera2dBundle::default());
// Define some puncture points
let puncture_points = vec![
PuncturePoint::new(Vec2::new(-225.0, 100.0), 'A'),
PuncturePoint::new(Vec2::new(-75.0, 150.0), 'B'),
PuncturePoint::new(Vec2::new(75.0, 150.0), 'C'),
PuncturePoint::new(Vec2::new(225.0, 100.0), 'D'),
];
// Render puncture points as red circles
let radius = 5.0;
let material = materials.add(ColorMaterial::from(Color::RED));
for point in puncture_points.iter() {
commands.spawn(MaterialMesh2dBundle {
mesh: meshes.add(Circle::new(radius)).into(),
material: material.clone(),
transform: Transform::from_translation(point.position().extend(0.0)),
..Default::default()
});
}
// spawn the player
commands.spawn((
Player,
MaterialMesh2dBundle {
mesh: meshes.add(Circle::new(10.0)).into(),
material: materials.add(PLAYER_COLOR),
transform: Transform::from_translation(PLAYER_START),
..Default::default()
},
PathType::new(PLAYER_START.truncate(), puncture_points),
));
// spawn the text
commands.spawn((
TextBundle::from_section(
"default",
TextStyle {
font_size: 60.0,
..Default::default()
},
)
.with_text_justify(JustifyText::Center)
.with_style(Style {
position_type: PositionType::Absolute,
bottom: Val::Px(5.0),
right: Val::Px(5.0),
..Default::default()
}),
HomotopyWordText,
));
}Trait Implementations§
source§impl Clone for PuncturePoint
impl Clone for PuncturePoint
source§fn clone(&self) -> PuncturePoint
fn clone(&self) -> PuncturePoint
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl Component for PuncturePoint
impl Component for PuncturePoint
§type Storage = TableStorage
type Storage = TableStorage
TableStorage or SparseStorage.source§impl Debug for PuncturePoint
impl Debug for PuncturePoint
source§impl PartialEq for PuncturePoint
impl PartialEq for PuncturePoint
source§fn eq(&self, other: &PuncturePoint) -> bool
fn eq(&self, other: &PuncturePoint) -> bool
self and other values to be equal, and is used
by ==.impl Copy for PuncturePoint
impl StructuralPartialEq for PuncturePoint
Auto Trait Implementations§
impl RefUnwindSafe for PuncturePoint
impl Send for PuncturePoint
impl Sync for PuncturePoint
impl Unpin for PuncturePoint
impl UnwindSafe for PuncturePoint
Blanket Implementations§
source§impl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
source§fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId) )
unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.