mirror of https://github.com/CGAL/cgal
Fixed calling the VectorH3 constructor using 3FT with underlying negative denominator(s)
If VectorH3 is constructed from 3 FT which are already decomposed in numerators and denominators, it was possible that the product of the denominators was negative, which gave an assertion error. Instead, we use the same mechanism as in the constructor with 4 RT: if the common denominator would be negative, we flip the signs.
This commit is contained in:
parent
5f8a64148a
commit
8703f5c122
|
|
@ -83,15 +83,26 @@ public:
|
|||
: base(CGAL::make_array<RT>(x, y, z, RT(1))) {}
|
||||
|
||||
VectorH3(const FT& x, const FT& y, const FT& z)
|
||||
: base(CGAL::make_array<RT>(
|
||||
Rat_traits().numerator(x) * Rat_traits().denominator(y)
|
||||
* Rat_traits().denominator(z),
|
||||
Rat_traits().numerator(y) * Rat_traits().denominator(x)
|
||||
* Rat_traits().denominator(z),
|
||||
Rat_traits().numerator(z) * Rat_traits().denominator(x)
|
||||
* Rat_traits().denominator(y),
|
||||
Rat_traits().denominator(x) * Rat_traits().denominator(y)
|
||||
* Rat_traits().denominator(z)))
|
||||
: base(Rat_traits().denominator(x) * Rat_traits().denominator(y)
|
||||
* Rat_traits().denominator(z) >= 0 ?
|
||||
CGAL::make_array<RT>(
|
||||
Rat_traits().numerator(x) * Rat_traits().denominator(y)
|
||||
* Rat_traits().denominator(z),
|
||||
Rat_traits().numerator(y) * Rat_traits().denominator(x)
|
||||
* Rat_traits().denominator(z),
|
||||
Rat_traits().numerator(z) * Rat_traits().denominator(x)
|
||||
* Rat_traits().denominator(y),
|
||||
Rat_traits().denominator(x) * Rat_traits().denominator(y)
|
||||
* Rat_traits().denominator(z)) :
|
||||
CGAL::make_array<RT>(
|
||||
- Rat_traits().numerator(x) * Rat_traits().denominator(y)
|
||||
* Rat_traits().denominator(z),
|
||||
- Rat_traits().numerator(y) * Rat_traits().denominator(x)
|
||||
* Rat_traits().denominator(z),
|
||||
- Rat_traits().numerator(z) * Rat_traits().denominator(x)
|
||||
* Rat_traits().denominator(y),
|
||||
- Rat_traits().denominator(x) * Rat_traits().denominator(y)
|
||||
* Rat_traits().denominator(z)))
|
||||
{
|
||||
CGAL_kernel_assertion(hw() > 0);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue