diff --git a/src/constrainteq.cpp b/src/constrainteq.cpp index ef963b0..86ed312 100644 --- a/src/constrainteq.cpp +++ b/src/constrainteq.cpp @@ -425,8 +425,7 @@ void ConstraintBase::GenerateEquations(IdList *l, Expr *r = circle->CircleGetRadiusExpr(); - AddEq(l, - ((du->Square())->Plus(dv->Square()))->Minus(r->Square()), 0); + AddEq(l, du->Square()->Plus(dv->Square())->Sqrt()->Minus(r), 0); return; } diff --git a/test/constraint/pt_on_circle/negative_dia.slvs b/test/constraint/pt_on_circle/negative_dia.slvs new file mode 100644 index 0000000..268c9a5 Binary files /dev/null and b/test/constraint/pt_on_circle/negative_dia.slvs differ diff --git a/test/constraint/pt_on_circle/test.cpp b/test/constraint/pt_on_circle/test.cpp index 5e9db1b..ce38ba5 100644 --- a/test/constraint/pt_on_circle/test.cpp +++ b/test/constraint/pt_on_circle/test.cpp @@ -15,3 +15,9 @@ TEST_CASE(normal_migrate_from_v22) { CHECK_LOAD("normal_v22.slvs"); CHECK_SAVE("normal.slvs"); } + +TEST_CASE(negative_dia) { + CHECK_LOAD("negative_dia.slvs"); + Entity *e = SK.GetEntity(hRequest { 4 }.entity(0)); + CHECK_TRUE(e->CircleGetRadiusNum() > 0); +}