Editing User:Amalia

From BRL-CAD

User account "Amalia" is not registered. Please check if you want to create/edit this page.

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 21: Line 21:
 
==Project Title: Conic Curve Support for LibreCAD==
 
==Project Title: Conic Curve Support for LibreCAD==
 
==Brief Project Summary==
 
==Brief Project Summary==
It has been observed that designers start from using small shapes called primitive to attain more complex ones. This project aims at building conic curve support into the LibreCAD software package by implementing the hyperbola and parabola primitives entity types. This will enable users of the LibreCAD software to use conics in modeling the Dulles Airport Tower in Virginia,  process just as in the . Hyperbolas in particular can be used in preliminary sketches of beautiful butterflies, nuclear cooling towers, hyperbolic shadows on the wall, hyperbolodial gears in skew shafts and buildings while parabolas can be used by architects to design rainbows, suspension bridges, roller coasters and much more.  During this Summer of Code period, I'll be incorporating these two primitives into LibreCAD by defining necessary classes and implementing member functions within interface and implementation files (lc_hyperbola.h, lc_parabola.h and lc_hyperbola.cpp, lc_parabola.cpp) in librecad/src/lib/engine/ and librecad/src/actions/.
+
It has been observed that designers start from using small shapes called primitive to attain more complex ones. This project aims at building conic curve support into the LibreCAD software package by implementing the hyperbola and parabola primitives entity types. This will enable users of the LibreCAD software to use conics in the modeling process. Hyperbolas in particular can be used in preliminary sketches of beautiful butterflies and buildings while parabolas can be used by architects to design rainbows, suspension bridges, roller coasters and much more.  During this Summer of Code period, I'll be incorporating these two primitives into LibreCAD by defining necessary classes and implementing member functions within interface and implementation files (rs_hyperbola.h, rs_parabola.h and rs_hyperbola.cpp, rs_parabola.cpp) in librecad/src/lib/engine/.
  
 
==Detailed Project Summary==
 
==Detailed Project Summary==
  
Here, I give more detailed information on how I intend to build conic curve support into the LibreCAD software package. From my recent studies of the ellipse and circle primitives (rs_circle.* and rs_ellipse.*) in librecad/src/lib/engine/, I observe that for each primitive type is designed as a class with data members which are attributes of that primitive and member functions implementations which define properties of the primitive. In LibreCAD, the framework of engine (math) support for ellipses can be applied readily to hyperbola/parabola, so only minor extension is needed to get those features. This is primarily because LibreCAD equation solvers can solve quartic equations.
+
Here, I give more detailed information on how I intend to build conic curve support into the LibreCAD software package. From my recent studies of the ellipse and circle primitives (rs_circle.* and rs_ellipse.*) in librecad/src/lib/engine/, I observe that for each primitive type is designed as a class with data members which are attributes of that primitive and member functions implementations which define properties of the primitive.  
  
 
=Hyperbola=
 
=Hyperbola=
Line 32: Line 32:
 
The hyperbola will be defines as a class with data members ;
 
The hyperbola will be defines as a class with data members ;
 
*center
 
*center
*majorP ( a in equation above)
+
*majorP ( furthest point on hyperbola from center on major axis)
 
*ratio ( of minor radius to major radius)
 
*ratio ( of minor radius to major radius)
 
*angle1
 
*angle1
Line 41: Line 41:
  
 
* Computing the direction of tangents at some points
 
* Computing the direction of tangents at some points
* Create a hyperbola from equation
+
* Draw a hyperbola
 
* Scale a hyperbola
 
* Scale a hyperbola
 
* Rotate a hyperbola
 
* Rotate a hyperbola
 
* Move a hyperbola
 
* Move a hyperbola
* Draw a hyperbola
 
 
* Determine if a point is on the hyperbola
 
* Determine if a point is on the hyperbola
 
* etc still have to be implemented.  
 
* etc still have to be implemented.  
Line 60: Line 59:
  
 
The parabola with vertex (x0, y0) which opens upwards is given by the equation (x - xo)^2 = 4a(y – yo).
 
The parabola with vertex (x0, y0) which opens upwards is given by the equation (x - xo)^2 = 4a(y – yo).
To implement the parabola primitive, we define Parabola Data and Parabola Entity classes with their data members and declare their corresponding geometric member functions in lc_parabola.h. In the lc_parabola.cpp implementation file, I'll be implementing the geometric member functions of the aforementioned Parabola classes.  
+
To implement the parabola primitive, we define Parabola Data and Parabola Entity classes with their data members and declare their corresponding geometric member functions in rs_parabola.h. In the rs_parabola.cpp implementation file, I'll be implementing the geometric member functions of the aforementioned Parabola classes.  
 
The geometric member functions to be implemented include;
 
The geometric member functions to be implemented include;
  
 
*Computing the position vector of the focus.
 
*Computing the position vector of the focus.
 
*Compute focal length
 
*Compute focal length
*Create a parabola from equation
 
 
*Find the tangential points and directions from a given point
 
*Find the tangential points and directions from a given point
 
*Rotate a parabola
 
*Rotate a parabola
Line 73: Line 71:
 
* And much more
 
* And much more
  
==Links to some Pictures==
+
==Links to any code or algorithms you intend to use==
1. http://www.pleacher.com/mp/mlessons/calculus/apphyper.html
 
 
 
2. http://britton.disted.camosun.bc.ca/jbconics.htm
 
 
 
3. http://www.thecoastercritic.com/2010/04/intimidator-carowinds-roller-coaster-reviews.html
 
 
 
4. https://mschrist.wikispaces.com/Art
 
 
 
5. http://en.wikipedia.org/wiki/Parabola#/media/File:Parabola-antipodera.gif
 
 
 
==References==
 
 
 
*http://mathworld.wolfram.com/Hyperbola.html
 
*http://mathworld.wolfram.com/Parabola.html
 
*http://en.wikipedia.org/wiki/Parabola
 
*http://en.wikipedia.org/wiki/Parallel_curve
 
  
 
====PROJECT TIMELINE====
 
====PROJECT TIMELINE====
 
 
==Deliverables ==
 
==Deliverables ==
  
Line 101: Line 82:
 
2.  Declare the geometric member functions.
 
2.  Declare the geometric member functions.
  
3. Write the lc_hyperbola.cpp file.
+
3. Write the rs_hyperbola.cpp file.
  
 
Post Mid-term evaluation goals
 
Post Mid-term evaluation goals
Line 109: Line 90:
 
5. Declare the geometric member functions.
 
5. Declare the geometric member functions.
  
6. Write the lc_parabola.cpp file.
+
6. Write the rs_parabola.cpp file.
  
 
==Development schedule==
 
==Development schedule==
 
=Community Bonding Period ( April 27th - May 24th )=
 
*Study LibreCAD's manuals and documentation.
 
*Study LibreCAD's code base to understand project more.
 
*Refine my project proposal based on updated knowledge.
 
*Write patches and remove bugs.
 
*Discuss with other developers and LibreCAD mentors on project orientations.
 
*Brush up my C++, Qt Creator and git development skills.
 
 
=Pre Mid-term Evaluation Work Period ( May 25th - June 25th )=
 
 
Week 1 (May 25th - May 29th)
 
*Defining the Hyperbola Data class
 
*Defining the Hyperbola Entity class
 
 
Week 2 (June 1st - June 5th)
 
*Computing the direction of tangents at some points
 
*Create a hyperbola from equation
 
 
Week 3 (June 8th - June 12th)
 
*Scale a hyperbola
 
*Rotate a hyperbola
 
 
Week 4 (June 15th - June 19th)
 
*Move a hyperbola
 
*Draw a hyperbola
 
 
Week 5 (June 22nd - June 26th)
 
*Determine if a point is on the hyperbola
 
*Return the equation of the hyperbola as LC_Quadratic to aid in finding intersection points between any LC_Quadratic object and a hyperbola.
 
 
Week 6 : Mid-term Evaluation Week ( June 29th - July 3rd )
 
*Offset function to compute the direction and distance of an offset
 
*Fill mid-term evaluation form.
 
 
=Post Mid-term Evaluation Work Period ( July 6th - August 20th )=
 
 
Week 7 (July 6th - July 10th)
 
*Computing the position vector of the focus of the parabola
 
*Compute the area occupied by the parabola
 
 
Week 8 (July 13th - July 17th)
 
*Return the equation of the parabola as LC_Quadratic to aid the finding of intersection points between any LC_Quadratic object and the parabola.
 
*Compute focal length of parabola
 
 
Week 9 (July 20th - July 24th)
 
*Create a parabola from equation
 
*Find the tangential points and directions from a given point on the parabola
 
 
Week 10 (July 27th - July 31st)
 
*Rotate a parabola
 
*Scale a parabola
 
 
Week 11 (August 3rd - August 7th)
 
Mirror a parabola against a given axis
 
Draw a parabola
 
 
Week 12 & 13 - Pencils down Period ( August 10th - August 21st )
 
 
*Offset member function to compute the direction and distance of offset
 
*Continue integrating conics into other aspects of LibreCAD.
 
*Testing and debugging of librecad/src/lib/engine/{lc_hyperbola.* & lc_parabola.*} code.
 
*Documenting conic curve primitives in LibreCAD.
 
*Producing animated videos of conics from LibreCAD.
 
 
Final Evaluation Week ( August 24th - August 28th )
 
*Fill Final evaluation form
 
*Submit code to Google
 
 
 
==Time availability==
 
==Time availability==
 
I'll be available to start and finish my Google Summer of Code project from May 25th through August 25th 2015 wherein I'll work 40+ hours weekly. To compensate for examination periods in school, I'll work harder during nights and weekends to make sure I meet the goals of my project.  
 
I'll be available to start and finish my Google Summer of Code project from May 25th through August 25th 2015 wherein I'll work 40+ hours weekly. To compensate for examination periods in school, I'll work harder during nights and weekends to make sure I meet the goals of my project.  
Line 190: Line 102:
  
 
==Why Me ?==
 
==Why Me ?==
I got introduced to computers (my dad literally imposed that on my siblings and I) when I attended the LUKMEF computer training in Limbe, Cameroon. After that I got interested in computer programming in C/C++ and the Organizers of the Google Developer Group Buea helped orientate me on how to learn programming. I've used Linux OSes especially Ubuntu since 2013 and would really be happy to get introduced to open source development through LibreCAD through the Google Summer of Code 2015 program. In November 2014, I helped set up FATE Automated Testing System in ffmpeg,the open source multimedia framework , on the Fedora 20 platform and submitted the results to fate.ffmpeg.org. If I am selected for the program, I will make sure I communicate my progress on a daily basis by chatting on IRC and writing on the mailing lists.
+
I got introduced to computers (my dad literally imposed that on my siblings and I) when I attended the LUKMEF computer training in Limbe, Cameroon. After that I got interested in computer programming in C/C++ and the Organizers of the Google Developer Group Buea helped orientate me on how to learn programming. I've used Linux OSes especially Ubuntu since 2013 and would really be happy to get introduced to open source development through LibreCAD through the Google Summer of Code 2015 program. If I am selected for the program, I will make sure I communicate my progress on a daily basis by chatting on IRC and writing on the mailing lists.
 
 
 
==Anything Else==
 
==Anything Else==
 
I believe that software development is about passion and not about what students major in while at University. Selecting me will really pass across a message that gender and race doesn't matter in open source development with LibreCAD and would encourage more students ( especially girls ) who aren't Computer Science/Engineering majors to get interested in Computer programming.
 
I believe that software development is about passion and not about what students major in while at University. Selecting me will really pass across a message that gender and race doesn't matter in open source development with LibreCAD and would encourage more students ( especially girls ) who aren't Computer Science/Engineering majors to get interested in Computer programming.
 
=DEVELOPMENT SCHEDULE =
 
 
* My development is kind of my Google Summer of Code Log Book. Anyone can view it  [http://brlcad.org/wiki/User:Amalia/Development_logs here].
 

Please note that all contributions to BRL-CAD may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see BRL-CAD:Copyrights for details). Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel Editing help (opens in new window)