Changeset 541 for cpp/frams


Ignore:
Timestamp:
07/26/16 18:52:32 (8 years ago)
Author:
oriona
Message:

Division by 0.0 for a single ellipsoid fixed [closes #42]. Sampling the same point twice fixed.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpp/frams/model/geometry/meshbuilder.cpp

    r540 r541  
    594594{
    595595        GeometryUtils::getNextEllipseSegmentationPoint(d, edge.z, edge.x, area.z, area.x);
    596                
     596
    597597        if ((area.z > limit.z) || (area.y > limit.y * sqrt(1.0 - (area.z*area.z) / (scale.z*scale.z))))
    598598        {
    599599                GeometryUtils::getNextEllipseSegmentationPoint(d, scale.y, scale.x, edge.y, edge.x);
    600                 edge.z = scale.z * sqrt(1.0 - (edge.y*edge.y) / (scale.y*scale.y));
    601                 double denom=sqrt(edge.x*edge.x + edge.z*edge.z);
    602                 limit.z = denom==0 ? 99999999 : edge.z*edge.z / denom; //temporary fix FIXME http://www.framsticks.com/trac/framsticks/ticket/42
    603                 area = Pt3D(edge.x, edge.y, 0.0);
    604                
    605600                if (edge.y > limit.y)
    606601                {
    607602                        initializePhase(Phase(phase+1));
     603                }
     604
     605                else
     606                {
     607                        edge.z = scale.z * sqrt(1.0 - (edge.y * edge.y) / (scale.y * scale.y));
     608                        limit.z = edge.z * edge.z / sqrt(edge.x * edge.x + edge.z * edge.z);
     609                        area = Pt3D(edge.x, edge.y, 0.0);
    608610                }
    609611        }
     
    804806        edge.setDensity(density);
    805807        edge.initialize(lowerBoundary, lowerBoundary + length);
    806        
     808       
     809        Pt3D dummy_point;
     810        edge.tryGetNext(dummy_point); //increment iterator to start from the second point
     811
    807812        area.setDensity(density);
    808813        area.initialize(lowerBoundary, lowerBoundary + width);
Note: See TracChangeset for help on using the changeset viewer.