diff --git a/cpp_frep/frep.cpp b/cpp_frep/frep.cpp index 1eb182c2aa6baa0d05256b110116567fcf7986fa..59b88bc801e620477c0698f1d44ea3d419a55327 100755 --- a/cpp_frep/frep.cpp +++ b/cpp_frep/frep.cpp @@ -152,6 +152,50 @@ namespace cpp_frep { } // private: + }; + + class InvoluteGear: public FrepPrimitive { + public: + scalar module =1.0f; + scalar angle =20.0f; + scalar teeth =10.0f; + scalar addendum =1.0f; + scalar dedendum =1.1f; + const float PI_F=3.14159265358979f; + + + InvoluteGear():module (1.0f), addendum (1.0f), dedendum (1.1f), angle (20.0f), teeth (10.0f) { + name="Rectangle"; + }; + InvoluteGear(scalar module_, scalar addendum_,scalar dedendum_,scalar angle_,scalar teeth_) { + module =module_; + angle =angle_; + teeth =teeth_; + addendum =addendum_; + dedendum =dedendum_; + name="Gear"; + }; + + scalar eval(){ + scalar rp = module*teeth/2.0f; // pitch radius + scalar rb = rp*cos(angle); // base radius + scalar ha = addendum*module; // addendum height + scalar hd= dedendum*module; // dedendum height + scalar ai = tan(angle)-angle; // involute angle + scalar ap = 2.0f*PI_F/teeth; // pitch angle + + angle=PI_F*angle/180.0f; + + scalar fn=std::max(std::min(std::min((rp+ha)-sqrtf(X*X+Y*Y),remainderf((PI_F+atan2f(Y,X)),ap)-(sqrtf(pow(std::max(rb,sqrtf(X*X+Y*Y))/rb,2.0)-1.0)-acosf(rb/std::max(rb,sqrt(X*X+Y*Y))))),-(sqrtf(powf(std::max(rb,sqrtf(X*X+Y*Y))/rb,2.0)-1.0)-acosf(rb/std::max(rb,sqrtf(X*X+Y*Y))))-(-(ap/2+2*ai)+remainderf((PI_F+atan2f(Y,X)),ap))),(rp-hd)-sqrtf(X*X+Y*Y)); + + return fn; + } + + InvoluteGear get(){ + return *this; + } + // private: + }; //..................................................................// @@ -657,4 +701,7 @@ namespace cpp_frep { }; //..................................................................// + + + } diff --git a/cpp_frep/main.cpp b/cpp_frep/main.cpp index 275057ec3d2473af6e5196fb427c06f38aeb2ad6..280c7eef5eda59864c1e91181b3c72a33cc3259f 100755 --- a/cpp_frep/main.cpp +++ b/cpp_frep/main.cpp @@ -496,7 +496,9 @@ int main(int const, char const**) { // drawFrep(tree,minX, maxX, minY, maxY, dx, dy,"final",false); PolarArray pa2(&r,45.0f,0.5f); - drawFrep(&pa2,minX, maxX, minY, maxY, dx, dy,"polar",true); + InvoluteGear gear( 1.0f, 1.0f, 1.1f, 20.0f, 8.0f) ; + Scale sc(&gear,0.0f,0.0f,0.25f,0.25f); + drawFrep(&sc,minX, maxX, minY, maxY, dx, dy,"gear",true); tree.printGenome();