From ce89f22328aa546a6e0bdb905484b9e57a14756c Mon Sep 17 00:00:00 2001 From: Amira Abdel-Rahman <aabdelrahman@gsd.harvard.edu> Date: Thu, 27 Jun 2019 10:27:07 -0400 Subject: [PATCH] added involute gear frep --- cpp_frep/frep.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++++ cpp_frep/main.cpp | 4 +++- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/cpp_frep/frep.cpp b/cpp_frep/frep.cpp index 1eb182c..59b88bc 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 275057e..280c7ee 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(); -- GitLab