mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-30 04:57:54 -06:00
Return identity from Mat3::square_to_quad for a degenerate quad
Found while testing crates/geom/src/lib.rs:252-264 Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Haiku 5.5
parent
de3fec28ed
commit
7bbdfb41f6
@@ -261,6 +261,9 @@ impl Mat3 {
|
||||
return Mat3([[x1 - x0, x3 - x0, x0], [y1 - y0, y3 - y0, y0], [0.0, 0.0, 1.0]]);
|
||||
}
|
||||
let den = dx1 * dy2 - dx2 * dy1;
|
||||
if den == 0.0 || !den.is_finite() {
|
||||
return Mat3::IDENTITY;
|
||||
}
|
||||
let g = (sx * dy2 - dx2 * sy) / den;
|
||||
let h = (dx1 * sy - sx * dy1) / den;
|
||||
Mat3([[x1 - x0 + g * x1, x3 - x0 + h * x3, x0], [y1 - y0 + g * y1, y3 - y0 + h * y3, y0], [g, h, 1.0]])
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
use effectcraft_geom::{Mat3, vec2};
|
||||
|
||||
#[test]
|
||||
fn square_to_quad_degenerate_is_finite() {
|
||||
let m = Mat3::square_to_quad([vec2(0.0, 5.0), vec2(0.0, 0.0), vec2(10.0, 0.0), vec2(20.0, 0.0)]);
|
||||
assert!(m.0.iter().flatten().all(|v| v.is_finite()), "non-finite: {m:?}");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn square_to_quad_regular_is_finite() {
|
||||
let m = Mat3::square_to_quad([vec2(0.0, 0.0), vec2(10.0, 0.0), vec2(8.0, 6.0), vec2(0.0, 5.0)]);
|
||||
assert!(m.0.iter().flatten().all(|v| v.is_finite()));
|
||||
}
|
||||
Reference in New Issue
Block a user