home *** CD-ROM | disk | FTP | other *** search
/ Dream 52 / Amiga_Dream_52.iso / Linux / Divers / freedraft.tar.gz / freedraft.tar / FREEdraft-050298 / GEOMLIB2D / testlib.cpp < prev   
C/C++ Source or Header  |  1998-04-19  |  11KB  |  379 lines

  1. // testlib.cpp
  2.  
  3. // Copyright (C) 1997  Cliff Johnson                                  //
  4. //                                                                         //
  5. // This library is free software; you can redistribute it and/or           //
  6. // modify it under the terms of the GNU Library General Public             //
  7. // License as published by the Free Software Foundation; either            //
  8. // version 2 of the License, or (at your option) any later version.        //
  9. //                                                                         //
  10. // This library is distributed in the hope that it will be useful,         //
  11. // but WITHOUT ANY WARRANTY; without even the implied warranty of          //
  12. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       //
  13. // Library General Public License for more details.                        //
  14. //                                                                         //
  15. // You should have received a copy of the GNU Library General Public       //
  16. // License along with this library (see COPYING.LIB); if not, write to the //
  17. // Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. //
  18. //   
  19.  
  20. #include "point.h"
  21. #include "line.h"
  22. #include "circle.h"
  23. #include "pick.h"
  24. #include "geom_enum.h"
  25. #include "geomlib2d.h"
  26. #include "geomexception.h"
  27.  
  28. #include <iostream.h>
  29.  
  30. int main(int argc, char** argv)
  31. {
  32.  
  33.  
  34.     Line l1(Point(10,4), Point(-1,1));
  35.     Line l2(Point(1,1), Point(1,1));
  36.  
  37.     Point p;
  38.  
  39.     cout << "\nTEST 1: Line vs. Line intersection : Simple case\n";
  40.     cout << "l1 = " << l1 << '\n';
  41.     cout << "l2 = " << l2 << '\n';
  42.     try { 
  43.         p = GL2D_SolveLineLineIntersection(l1,l2);
  44.     }
  45.     catch (const GeomException& e){
  46.         cout << "exception caught: " << e.what() << endl;
  47.     }    
  48.     cout << "p = " << p << endl;
  49.  
  50.     l2 = Line(Point(0,0), Point(1,0));
  51.  
  52.     cout << "\nTEST 2: Line vs. Line intersection : Horizontal line 2\n";
  53.     cout << "l1 = " << l1 << '\n';
  54.     cout << "l2 = " << l2 << '\n';
  55.     try { 
  56.         p = GL2D_SolveLineLineIntersection(l1,l2);
  57.     }
  58.     catch ( const GeomException & e){
  59.         cout << "exception caught: " << e.what() << endl;
  60.     }    
  61.     cout << "p = " << p << endl;
  62.  
  63.     l2 = Line(Point(2,10), Point(-1,1));
  64.  
  65.     cout << "\nTEST 3: Line vs. Line intersection : Parallel lines:\n";
  66.     cout << "l1 = " << l1 << '\n';
  67.     cout << "l2 = " << l2 << '\n';
  68.     try {
  69.     p = GL2D_SolveLineLineIntersection(l1,l2);
  70.     }
  71.     catch ( const GeomException & e){
  72.         cout << "exception caught: " << e.what() << endl;
  73.     }    
  74.     cout << "p = " << p << endl;
  75.  
  76.     l2 = Line(Point(2,10), Point(-1,.9998));
  77.  
  78.     cout << "\nTEST 4: Line vs. Line intersection : Nearly parallel lines:\n";
  79.     cout << "l1 = " << l1 << '\n';
  80.     cout << "l2 = " << l2 << '\n';
  81.     try {
  82.         p = GL2D_SolveLineLineIntersection(l1,l2);
  83.     }
  84.     catch ( const GeomException & e){
  85.         cout << "exception caught: " << e.what() << endl;
  86.     }    
  87.     cout << "p = " << p << endl;
  88.  
  89.     l2 = Line(Point(2,10), Point(-1,.9999));
  90.  
  91.     cout << "\nTEST 5: Line vs. Line intersection : Nearly parallel lines:\n";
  92.     cout << "l1 = " << l1 << '\n';
  93.     cout << "l2 = " << l2 << '\n';
  94.     try {
  95.         p = GL2D_SolveLineLineIntersection(l1,l2);
  96.     }
  97.     catch ( const GeomException & e){
  98.         cout << "exception caught: " << e.what() << endl;
  99.     }    
  100.     cout << "p = " << p << endl;
  101.  
  102.     l1 = Line(Point(2,10.5), Point(0,1));
  103.  
  104.     cout << "\nTEST 6: Line vs. Line intersection : Vertical line 1\n";
  105.     cout << "l1 = " << l1 << '\n';
  106.     cout << "l2 = " << l2 << '\n';
  107.     try {
  108.     p = GL2D_SolveLineLineIntersection(l1,l2);
  109.     }
  110.     catch ( const GeomException & e){
  111.         cout << "exception caught: " << e.what() << endl;
  112.     }    
  113.     cout << "p = " << p << endl;
  114.  
  115.     l2 = Line(Point(2,10.5), Point(0,1));
  116.  
  117.     cout << "\nTEST 7 : Line vs. Line intersection : Vertical and Parallel lines:\n";
  118.     cout << "l1 = " << l1 << '\n';
  119.     cout << "l2 = " << l2 << '\n';
  120.     try { 
  121.     p = GL2D_SolveLineLineIntersection(l1,l2);
  122.     }
  123.     catch ( const GeomException & e){
  124.         cout << "exception caught: " << e.what() << endl;
  125.     }    
  126.     cout << "p = " << p << endl;
  127.         
  128.     l1 = Line(Point(4,6), Point(2,3));
  129.  
  130.     cout << "\nTEST 8 : Line vs. Line intersection : Vertical line 2\n";
  131.     cout << "l1 = " << l1 << '\n';
  132.     cout << "l2 = " << l2 << '\n';
  133.     try {
  134.     p = GL2D_SolveLineLineIntersection(l1,l2);
  135.     }
  136.     catch ( const GeomException & e){
  137.         cout << "exception caught: " << e.what() << endl;
  138.     }    
  139.     cout << "p = " << p << endl;
  140.  
  141.     cout << "\nTEST 9 : point projection 1: Point(0,0) to l2 = " << l2.Project(Point()) << '\n';
  142.  
  143.     l1 = Line(Point(3,3), Point(1,-1));
  144.     cout << "l1 = " << l1 << '\n';
  145.     cout << "\nTEST 10: point projection 2: Point(0,0) to l1 = " << l1.Project(Point()) << '\n';
  146.  
  147.     // testing of general line by 2 constraints 
  148.  
  149.     Circle c1 = Circle(Point() ,5.);
  150.     Circle c2 = Circle(Point() ,5.);
  151.     Point pick1(-1,5);
  152.     Point pick2(1,5);
  153.  
  154.     cout << "\nTEST 11: SolveLineTangentCircleCircle 1: coincident circles\n";
  155.     cout << "c1 = " << c1 << '\n';
  156.     cout << "c2 = " << c2 << '\n';
  157.     cout << "pick1 = " << pick1 << '\n';
  158.     cout << "pick2 = " << pick2 << '\n';
  159.     try {
  160.         l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  161.     }
  162.     catch ( const GeomException & e){
  163.         cout << "exception caught: " << e.what() << endl;
  164.     }    
  165.     cout << "l1 = " << l1 << endl;
  166.  
  167.     c2 = Circle(Point(1,0),5.);
  168.  
  169.     cout << "\nTEST 12: SolveLineTangentCircleCircle 2: circle center inside circle 1\n";
  170.     cout << "c1 = " << c1 << '\n';
  171.     cout << "c2 = " << c2 << '\n';
  172.     cout << "pick1 = " << pick1 << '\n';
  173.     cout << "pick2 = " << pick2 << '\n';
  174.     try {
  175.     l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  176.     }
  177.     catch ( const GeomException & e){
  178.         cout << "exception caught: " << e.what() << endl;
  179.     }    
  180.     cout << "l1 = " << l1 << endl;
  181.  
  182.     pick1 = Point(-1,-5);
  183.  
  184.     cout << "\nTEST 13: SolveLineTangentCircleCircle 3: circle center inside circle 2\n";
  185.     cout << "c1 = " << c1 << '\n';
  186.     cout << "c2 = " << c2 << '\n';
  187.     cout << "pick1 = " << pick1 << '\n';
  188.     cout << "pick2 = " << pick2 << '\n';
  189.     try {
  190.     l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  191.     }
  192.     catch ( const GeomException & e){
  193.         cout << "exception caught: " << e.what() << endl;
  194.     }    
  195.     cout << "l1 = " << l1 << endl;
  196.  
  197.     c1 = Circle(Point(2,1),5.);
  198.  
  199.     cout << "\nTEST 14: SolveLineTangentCircleCircle 4: circle center inside circle 3\n";
  200.     cout << "c1 = " << c1 << '\n';
  201.     cout << "c2 = " << c2 << '\n';
  202.     cout << "pick1 = " << pick1 << '\n';
  203.     cout << "pick2 = " << pick2 << '\n';
  204.     try {
  205.     l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  206.     }
  207.     catch ( const GeomException & e){
  208.         cout << "exception caught: " << e.what() << endl;
  209.     }    
  210.     cout << "l1 = " << l1 << endl;
  211.  
  212.     c1 = Circle(Point() ,5.);
  213.     c2 = Circle(Point(2,2) ,2.);
  214.  
  215.     cout << "\nTEST 15: SolveLineTangentCircleCircle 5: circle inside circle 1\n";
  216.     cout << "c1 = " << c1 << '\n';
  217.     cout << "c2 = " << c2 << '\n';
  218.     cout << "pick1 = " << pick1 << '\n';
  219.     cout << "pick2 = " << pick2 << '\n';
  220.     try {
  221.     l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  222.     }
  223.     catch ( const GeomException & e){
  224.         cout << "exception caught: " << e.what() << endl;
  225.     }    
  226.     cout << "l1 = " << l1 << endl;
  227.  
  228.     c2 = Circle(Point(2,0),3);
  229.     
  230.     cout << "\nTEST 16: SolveLineTangentCircleCircle 6: circle inside circle and tangent 1\n";
  231.     cout << "c1 = " << c1 << '\n';
  232.     cout << "c2 = " << c2 << '\n';
  233.     cout << "pick1 = " << pick1 << '\n';
  234.     cout << "pick2 = " << pick2 << '\n';
  235.     try {
  236.     l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  237.     }
  238.     catch ( const GeomException & e){
  239.         cout << "exception caught: " << e.what() << endl;
  240.     }    
  241.     cout << "l1 = " << l1 << endl;
  242.  
  243.     c2 = Circle(Point(10,10),5);
  244.     pick1 = Point(0,5);
  245.     pick2 = Point(7,13);
  246.     
  247.     cout << "\nTEST 17: SolveLineTangentCircleCircle 7: general solution 1\n";
  248.     cout << "c1 = " << c1 << '\n';
  249.     cout << "c2 = " << c2 << '\n';
  250.     cout << "pick1 = " << pick1 << '\n';
  251.     cout << "pick2 = " << pick2 << '\n';
  252.     try {
  253.     l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  254.     }
  255.     catch ( const GeomException & e){
  256.         cout << "exception caught: " << e.what() << endl;
  257.     }    
  258.     cout << "l1 = " << l1 << endl;
  259.     
  260.     pick2 = Point(13,7);
  261.     
  262.     cout << "\nTEST 18: SolveLineTangentCircleCircle 8: general solution 2\n";
  263.     cout << "c1 = " << c1 << '\n';
  264.     cout << "c2 = " << c2 << '\n';
  265.     cout << "pick1 = " << pick1 << '\n';
  266.     cout << "pick2 = " << pick2 << '\n';
  267.     try {
  268.     l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  269.     }
  270.     catch ( const GeomException & e){
  271.         cout << "exception caught: " << e.what() << endl;
  272.     }    
  273.     cout << "l1 = " << l1 << endl;
  274.  
  275.     pick1 = Point(5,-5);
  276.     
  277.     cout << "\nTEST 19: SolveLineTangentCircleCircle 9: general solution 2\n";
  278.     cout << "c1 = " << c1 << '\n';
  279.     cout << "c2 = " << c2 << '\n';
  280.     cout << "pick1 = " << pick1 << '\n';
  281.     cout << "pick2 = " << pick2 << '\n';
  282.     try {
  283.     l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  284.     }
  285.     catch ( const GeomException & e){
  286.         cout << "exception caught: " << e.what() << endl;
  287.     }    
  288.     cout << "l1 = " << l1 << endl;
  289.  
  290.     pick2 = Point(6,10);
  291.     
  292.     cout << "\nTEST 20 : SolveLineTangentCircleCircle 10: general solution 2\n";
  293.     cout << "c1 = " << c1 << '\n';
  294.     cout << "c2 = " << c2 << '\n';
  295.     cout << "pick1 = " << pick1 << '\n';
  296.     cout << "pick2 = " << pick2 << '\n';
  297.     try { 
  298.     l1 = GL2D_SolveLineTangentCircleCircle(c1,c2,pick1,pick2);
  299.     }
  300.     catch ( const GeomException & e){
  301.         cout << "exception caught: " << e.what() << endl;
  302.     }    
  303.     cout << "l1 = " << l1 << endl;
  304.  
  305.  
  306.     Point px1(-14.2105,1.05263);
  307.     Point px2(56.3158, 9.47368 );
  308.     Point px3(66.0526, 3.94737);
  309.     Point px4(-14.7368, -9.21053);
  310.  
  311.     Circle cx1(px1,px4);
  312.     Circle cx2(px2,px3);
  313.  
  314.     pick1=Point(-10,-8.94737);
  315.     pick2=Point( 53.6842, 20.7895);
  316.  
  317.     cout << "\nTEST 21: SolveLineTangentCircleCircle 11:\n";
  318.     cout << "cx1 = " << cx1 << '\n';
  319.     cout << "cx2 = " << cx2 << '\n';
  320.     cout << "pick1 = " << pick1 << '\n';
  321.     cout << "pick2 = " << pick2 << '\n';
  322.     try { 
  323.     l1 = GL2D_SolveLineTangentCircleCircle(cx1,cx2,pick1,pick2);    
  324.     }
  325.     catch ( const GeomException & e){
  326.         cout << "exception caught: " << e.what() << endl;
  327.     }    
  328.     cout << "l1 = " << l1 << endl;
  329.  
  330.  
  331.     cout << "\nTEST 22: Using Picks...GL2D_LineConstraints(CIRCLE,CIRCLE)\n";
  332.     Pick pk1(&c1,pick1);
  333.     Pick pk2(&c2,pick2);
  334.     cout << "pk1 = " << pk1 << '\n';
  335.     cout << "pk2 = " << pk2 << '\n';
  336.     try {
  337.         l1 = GL2D_LineByConstraints(pk1,pk2);
  338.     }
  339.     catch ( const GeomException & e){
  340.         cout << "exception caught: " << e.what() << endl;
  341.     }    
  342.     cout << "l1 = " << l1 << endl;
  343.  
  344.     cout << "\nTEST 23: GL2D_LineConstraints(POINT,POINT)\n";
  345.     pk1 = Pick(&pick1, pick1);
  346.     pk2 = Pick(&pick2, pick2);
  347.     cout << "pk1 = " << pk1 << '\n';
  348.     cout << "pk2 = " << pk2 << '\n';
  349.     try 
  350.     {
  351.         l1 = GL2D_LineByConstraints(pk1,pk2);
  352.     }
  353.     catch ( const GeomException & e)
  354.     {
  355.         cout << "exception caught: " << e.what() << endl;
  356.     }    
  357.     cout << "l1 = " << l1 << endl;
  358.  
  359.     cout << "\nTEST 25: Using Picks...GL2D_PointConstraints(CIRCLE,CIRCLE)\n";
  360.     Point pz1(10,20);
  361.     Point pz2(-10,10);
  362.     pk1 = Pick(&pz1,pick1);
  363.     pk2 = Pick(&pz2,pick2);
  364.     cout << "pk1 = " << pk1 << '\n';
  365.     cout << "pk2 = " << pk2 << '\n';
  366.     try {
  367.         p = GL2D_PointByConstraints(pk1,pk2);
  368.     }
  369.     catch ( const GeomException & e){
  370.         cout << "exception caught: " << e.what() << endl;
  371.     }    
  372.     cout << "p = " << p << endl;
  373.  
  374.     return 0;
  375.  
  376. }
  377.  
  378.  
  379.