use kcl_ezpz::{
Config, Constraint, ConstraintRequest, IdGenerator, datatypes::inputs::DatumPoint, solve,
};
fn main() {
let mut ids = IdGenerator::default();
let p = DatumPoint::new(&mut ids);
let q = DatumPoint::new(&mut ids);
let requests = [
ConstraintRequest::highest_priority(Constraint::Fixed(p.id_x(), 0.0)),
ConstraintRequest::highest_priority(Constraint::Fixed(p.id_y(), 0.0)),
ConstraintRequest::highest_priority(Constraint::Distance(p, q, 4.0)),
];
let initial_guesses = vec![
(p.id_x(), 0.0),
(p.id_y(), -0.02),
(q.id_x(), 4.39),
(q.id_y(), 4.38),
];
let outcome = solve(&requests, initial_guesses, Config::default());
match outcome {
Ok(solution) => {
assert!(solution.is_satisfied());
let solved_p = solution.final_value_point(&p);
let solved_q = solution.final_value_point(&q);
println!("P = ({}, {})", solved_p.x, solved_p.y);
println!("Q = ({}, {})", solved_q.x, solved_q.y);
}
Err(e) => {
eprintln!("ezpz could not solve this constraint system: {}", e.error);
}
}
}