Simplify rect properties

This commit is contained in:
numzero 2024-04-29 01:14:48 +03:00
parent 5aca27ddd7
commit 1d19ad7968

View File

@ -12,8 +12,7 @@ pub fn main() {
}; };
let space = Rect { let space = Rect {
scale: 3.0, scale: 3.0,
a: vec2(- 30.0, - 300.0), r: vec2(30.0, 300.0),
b: vec2(30.0, 300.0),
m: vec2(20.0, 50.0), m: vec2(20.0, 50.0),
}; };
with_2d_graphics(move || { with_2d_graphics(move || {
@ -71,8 +70,8 @@ impl Renderable for Coil {
impl Renderable for Rect { impl Renderable for Rect {
fn render(&self, gc: &mut Vec<Draw>) { fn render(&self, gc: &mut Vec<Draw>) {
gc.new_path(); gc.new_path();
gc.rect(self.a.x - self.m.x, self.a.y - self.m.y, self.b.x + self.m.x, self.b.y + self.m.y); gc.rect(-self.r.x - self.m.x, -self.r.y - self.m.y, self.r.x + self.m.x, self.r.y + self.m.y);
gc.rect(self.a.x, self.a.y, self.b.x, self.b.y); gc.rect(-self.r.x, -self.r.y, self.r.x, self.r.y);
gc.winding_rule(WindingRule::EvenOdd); gc.winding_rule(WindingRule::EvenOdd);
gc.fill_color(Color::Rgba(0.8, 0.8, 0.8, 1.0)); gc.fill_color(Color::Rgba(0.8, 0.8, 0.8, 1.0));
gc.fill(); gc.fill();
@ -80,7 +79,7 @@ impl Renderable for Rect {
gc.stroke_color(Color::Rgba(1.0, 0.5, 0.0, 1.0)); gc.stroke_color(Color::Rgba(1.0, 0.5, 0.0, 1.0));
draw_fan(gc, self, vec2(-500.0, 0.0), vec2(1.0, 0.0), 1.0); draw_fan(gc, self, vec2(-500.0, 0.0), vec2(1.0, 0.0), 1.0);
gc.stroke_color(Color::Rgba(0.0, 0.5, 1.0, 1.0)); gc.stroke_color(Color::Rgba(0.0, 0.5, 1.0, 1.0));
draw_fan(gc, self, vec2(0.0, 0.5 * self.a.y), vec2(1.0, 1.0), 1.0); draw_fan(gc, self, vec2(0.0, -0.5 * self.r.y), vec2(1.0, 1.0), 1.0);
} }
} }
@ -111,14 +110,13 @@ impl Metric for Coil {
struct Rect { struct Rect {
scale: f32, scale: f32,
a: Vec2, r: Vec2,
b: Vec2,
m: Vec2, m: Vec2,
} }
impl Metric for Rect { impl Metric for Rect {
fn halfmetric(&self, pos: Vec2) -> Decomp2 { fn halfmetric(&self, pos: Vec2) -> Decomp2 {
let s = smoothbox(pos.x, vec2(self.a.x, self.b.x), self.m.x) * smoothbox(pos.y, vec2(self.a.y, self.b.y), self.m.y); let s = smoothbox(pos.x, vec2(-self.r.x, self.r.x), self.m.x) * smoothbox(pos.y, vec2(-self.r.y, self.r.y), self.m.y);
Decomp2{ Decomp2{
ortho: Mat2::IDENTITY, ortho: Mat2::IDENTITY,
diag: vec2(1.0, self.scale.powf(-s)), diag: vec2(1.0, self.scale.powf(-s)),