mirror of https://codeberg.org/topola/topola.git
egui: fix painted bend direction
This commit is contained in:
parent
1706d5ae8c
commit
b35e6fc66a
|
|
@ -1,7 +1,7 @@
|
|||
use geo::{CoordsIter, Point, Polygon};
|
||||
use topola::{
|
||||
geometry::primitive::{PrimitiveShape, PrimitiveShapeTrait},
|
||||
math::Circle,
|
||||
math::{self, Circle},
|
||||
};
|
||||
|
||||
pub struct Painter<'a> {
|
||||
|
|
@ -31,12 +31,14 @@ impl<'a> Painter<'a> {
|
|||
let delta_to = bend.to - bend.c.pos;
|
||||
|
||||
let angle_from = delta_from.y().atan2(delta_from.x());
|
||||
let angle_to = delta_to.y().atan2(delta_to.x());
|
||||
|
||||
let cross = math::cross_product(delta_from, delta_to);
|
||||
let dot = math::dot_product(delta_from, delta_to);
|
||||
let angle_step = cross.atan2(dot) / 100.0;
|
||||
|
||||
let mut points: Vec<egui::Pos2> = vec![];
|
||||
|
||||
let angle_step = (angle_to - angle_from) / 100.0;
|
||||
|
||||
for i in 0..100 {
|
||||
for i in 0..=100 {
|
||||
let x = bend.c.pos.x() + bend.c.r * (angle_from + i as f64 * angle_step).cos();
|
||||
let y = bend.c.pos.y() + bend.c.r * (angle_from + i as f64 * angle_step).sin();
|
||||
points.push(self.transform.transform_pos([x as f32, -y as f32].into()));
|
||||
|
|
|
|||
|
|
@ -238,6 +238,10 @@ pub fn seq_cross_product(start: Point, stop: Point, reference: Point) -> f64 {
|
|||
cross_product((dx1, dy1).into(), (dx2, dy2).into())
|
||||
}
|
||||
|
||||
pub fn dot_product(v1: Point, v2: Point) -> f64 {
|
||||
v1.x() * v2.x() + v1.y() * v2.y()
|
||||
}
|
||||
|
||||
pub fn cross_product(v1: Point, v2: Point) -> f64 {
|
||||
v1.x() * v2.y() - v1.y() * v2.x()
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue