Improve ergonomics
This commit is contained in:
parent
3abe5c6573
commit
8a33818790
@ -28,15 +28,15 @@ fn main() {
|
||||
let u2 = math::Unknown(2);
|
||||
// let u1 = eqn::Expr::from(1.);
|
||||
// let u2 = eqn::Expr::from(1.);
|
||||
let origin = CPoint::new_single(Point2::new((0.).into(), (0.).into())).into_ref();
|
||||
let origin = CPoint::new_single(Point2::new(0., 0.)).into_ref();
|
||||
// let p1 = Point::new_ref(Var::new_full(Point2::new((1.).into(), (1.).into())));
|
||||
let p1 = CPoint::new(
|
||||
Point2::new(0., 0.),
|
||||
Region2::Singleton(Point2::new((u1).into(), (u2).into())),
|
||||
)
|
||||
.into_ref();
|
||||
let p2 = CPoint::new_full(Point2::new((4.).into(), (4.).into())).into_ref();
|
||||
let p3 = CPoint::new_full(Point2::new((2.).into(), (2.).into())).into_ref();
|
||||
let p2 = CPoint::new_full(Point2::new(4., 4.)).into_ref();
|
||||
let p3 = CPoint::new_full(Point2::new(2., 2.)).into_ref();
|
||||
let mut points: Vec<PointRef> = vec![origin.clone(), p1.clone(), p2.clone(), p3.clone()];
|
||||
let print_points = |points: &Vec<PointRef>| {
|
||||
println!(
|
||||
|
@ -3,6 +3,7 @@ use std::fmt;
|
||||
use super::expr::Expr;
|
||||
use super::unknown::*;
|
||||
use super::Scalar;
|
||||
use crate::math::expr::Expr::*;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq)]
|
||||
pub struct Eqn(pub Expr, pub Expr);
|
||||
@ -47,17 +48,18 @@ impl Eqn {
|
||||
if !self.has_unknown(for_u) {
|
||||
return None;
|
||||
}
|
||||
trace!("solve: {}", self);
|
||||
let (l, r) = (
|
||||
self.0
|
||||
.clone() /*.distribute()*/
|
||||
.clone().distribute()
|
||||
.simplify(),
|
||||
self.1
|
||||
.clone() /*.distribute()*/
|
||||
.clone().distribute()
|
||||
.simplify(),
|
||||
);
|
||||
let (mut l, mut r) = ord_by_unkn(l, r, for_u)?;
|
||||
loop {
|
||||
trace!("solve: {} == {}", l, r);
|
||||
trace!("solve iter: {} == {}", l, r);
|
||||
let (new_l, new_r): (Expr, Expr) = match l {
|
||||
Unkn(u) => return if u == for_u { Some(r.simplify()) } else { None },
|
||||
Sum(es) => {
|
||||
|
@ -31,14 +31,16 @@ impl Unknowns for Exprs {
|
||||
|
||||
fn write_separated_exprs(es: &Exprs, f: &mut fmt::Formatter, sep: &str) -> fmt::Result {
|
||||
let mut is_first = true;
|
||||
write!(f, "(")?;
|
||||
for e in es {
|
||||
if is_first {
|
||||
is_first = false;
|
||||
} else {
|
||||
write!(f, "{}", sep)?
|
||||
}
|
||||
write!(f, "({})", e)?
|
||||
write!(f, "{}", e)?
|
||||
}
|
||||
write!(f, ")")?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -451,7 +453,7 @@ impl fmt::Display for Expr {
|
||||
Const(c) => write!(f, "{}", c),
|
||||
Sum(es) => write_separated_exprs(es, f, " + "),
|
||||
Product(es) => write_separated_exprs(es, f, " * "),
|
||||
Div(num, den) => write!(f, "({}) / ({})", num, den),
|
||||
Div(num, den) => write!(f, "({} / {})", num, den),
|
||||
Neg(e) => write!(f, "-({})", e),
|
||||
}
|
||||
}
|
||||
|
@ -150,7 +150,7 @@ impl fmt::Display for Line2 {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(
|
||||
f,
|
||||
"{{ <x, y> = {} + {} * {} }}",
|
||||
"{{ (x, y, t): ⟨x, y⟩ = {} + t{} & t ∈ {} }}",
|
||||
self.start, self.dir, self.extent
|
||||
)
|
||||
}
|
||||
|
@ -149,7 +149,7 @@ use std::fmt;
|
||||
|
||||
impl<T: fmt::Display> fmt::Display for Point2<T> {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "<{}, {}>", self.x, self.y)
|
||||
write!(f, "⟨{}, {}⟩", self.x, self.y)
|
||||
}
|
||||
}
|
||||
|
||||
@ -161,7 +161,7 @@ pub struct Rot2 {
|
||||
|
||||
impl fmt::Display for Rot2 {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, "<{}, {}>", self.cos, self.sin)
|
||||
write!(f, "⟨{}, {}⟩", self.cos, self.sin)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user