From 58b786d6e60ab68279c4d7d57549d1ae437752c8 Mon Sep 17 00:00:00 2001 From: Garux Date: Fri, 5 Jul 2019 19:27:00 +0300 Subject: [PATCH] * fix face centroids of small faces at big coordinates in 64 bit (explicitly cast to double, which likely happens implicitly in 32 bit) --- radiant/winding.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/radiant/winding.cpp b/radiant/winding.cpp index f35d53c6..4ae5259d 100644 --- a/radiant/winding.cpp +++ b/radiant/winding.cpp @@ -368,10 +368,10 @@ void Winding_Centroid( const Winding& winding, const Plane3& plane, Vector3& cen const indexremap_t remap = indexremap_for_projectionaxis( axis ); for ( std::size_t i = winding.numpoints - 1, j = 0; j < winding.numpoints; i = j, ++j ) { - const double ai = winding[i].vertex[remap.x] * winding[j].vertex[remap.y] - winding[j].vertex[remap.x] * winding[i].vertex[remap.y]; + const double ai = static_cast( winding[i].vertex[remap.x] ) * winding[j].vertex[remap.y] - static_cast( winding[j].vertex[remap.x] ) * winding[i].vertex[remap.y]; area2 += ai; - x_sum += ( winding[j].vertex[remap.x] + winding[i].vertex[remap.x] ) * ai; - y_sum += ( winding[j].vertex[remap.y] + winding[i].vertex[remap.y] ) * ai; + x_sum += ( static_cast( winding[j].vertex[remap.x] ) + winding[i].vertex[remap.x] ) * ai; + y_sum += ( static_cast( winding[j].vertex[remap.y] ) + winding[i].vertex[remap.y] ) * ai; } centroid[remap.x] = static_cast( x_sum / ( 3 * area2 ) );