Changeset fa5a6a for src


Ignore:
Timestamp:
Apr 30, 2010, 1:33:12 PM (15 years ago)
Author:
Tillmann Crueger <crueger@…>
Branches:
Action_Thermostats, Add_AtomRandomPerturbation, Add_FitFragmentPartialChargesAction, Add_RotateAroundBondAction, Add_SelectAtomByNameAction, Added_ParseSaveFragmentResults, AddingActions_SaveParseParticleParameters, Adding_Graph_to_ChangeBondActions, Adding_MD_integration_tests, Adding_ParticleName_to_Atom, Adding_StructOpt_integration_tests, AtomFragments, Automaking_mpqc_open, AutomationFragmentation_failures, Candidate_v1.5.4, Candidate_v1.6.0, Candidate_v1.6.1, ChangeBugEmailaddress, ChangingTestPorts, ChemicalSpaceEvaluator, CombiningParticlePotentialParsing, Combining_Subpackages, Debian_Package_split, Debian_package_split_molecuildergui_only, Disabling_MemDebug, Docu_Python_wait, EmpiricalPotential_contain_HomologyGraph, EmpiricalPotential_contain_HomologyGraph_documentation, Enable_parallel_make_install, Enhance_userguide, Enhanced_StructuralOptimization, Enhanced_StructuralOptimization_continued, Example_ManyWaysToTranslateAtom, Exclude_Hydrogens_annealWithBondGraph, FitPartialCharges_GlobalError, Fix_BoundInBox_CenterInBox_MoleculeActions, Fix_ChargeSampling_PBC, Fix_ChronosMutex, Fix_FitPartialCharges, Fix_FitPotential_needs_atomicnumbers, Fix_ForceAnnealing, Fix_IndependentFragmentGrids, Fix_ParseParticles, Fix_ParseParticles_split_forward_backward_Actions, Fix_PopActions, Fix_QtFragmentList_sorted_selection, Fix_Restrictedkeyset_FragmentMolecule, Fix_StatusMsg, Fix_StepWorldTime_single_argument, Fix_Verbose_Codepatterns, Fix_fitting_potentials, Fixes, ForceAnnealing_goodresults, ForceAnnealing_oldresults, ForceAnnealing_tocheck, ForceAnnealing_with_BondGraph, ForceAnnealing_with_BondGraph_continued, ForceAnnealing_with_BondGraph_continued_betteresults, ForceAnnealing_with_BondGraph_contraction-expansion, FragmentAction_writes_AtomFragments, FragmentMolecule_checks_bonddegrees, GeometryObjects, Gui_Fixes, Gui_displays_atomic_force_velocity, ImplicitCharges, IndependentFragmentGrids, IndependentFragmentGrids_IndividualZeroInstances, IndependentFragmentGrids_IntegrationTest, IndependentFragmentGrids_Sole_NN_Calculation, JobMarket_RobustOnKillsSegFaults, JobMarket_StableWorkerPool, JobMarket_unresolvable_hostname_fix, MoreRobust_FragmentAutomation, ODR_violation_mpqc_open, PartialCharges_OrthogonalSummation, PdbParser_setsAtomName, PythonUI_with_named_parameters, QtGui_reactivate_TimeChanged_changes, Recreated_GuiChecks, Rewrite_FitPartialCharges, RotateToPrincipalAxisSystem_UndoRedo, SaturateAtoms_findBestMatching, SaturateAtoms_singleDegree, StoppableMakroAction, Subpackage_CodePatterns, Subpackage_JobMarket, Subpackage_LinearAlgebra, Subpackage_levmar, Subpackage_mpqc_open, Subpackage_vmg, Switchable_LogView, ThirdParty_MPQC_rebuilt_buildsystem, TrajectoryDependenant_MaxOrder, TremoloParser_IncreasedPrecision, TremoloParser_MultipleTimesteps, TremoloParser_setsAtomName, Ubuntu_1604_changes, stable
Children:
6f646d
Parents:
1513a74
Message:

Added unittests for planes

Location:
src
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • src/Plane.cpp

    r1513a74 rfa5a6a  
    4444 * If no offset is given a plane through origin is assumed
    4545 */
    46 Plane::Plane(const Vector &y1, const Vector &y2, double _offset) throw(LinearDependenceException) :
     46Plane::Plane(const Vector &y1, const Vector &y2, double _offset) throw(ZeroVectorException,LinearDependenceException) :
    4747    normalVector(new Vector()),
    4848    offset(_offset)
     
    5050  Vector x1 = y1;
    5151  Vector x2 = y2;
    52   if ((fabs(x1.Norm()) < MYEPSILON) || (fabs(x2.Norm()) < MYEPSILON) || (fabs(x1.Angle(x2)) < MYEPSILON)) {
     52  if ((fabs(x1.Norm()) < MYEPSILON) || (fabs(x2.Norm()) < MYEPSILON)) {
     53    throw ZeroVectorException(__FILE__,__LINE__);
     54  }
     55
     56  if((fabs(x1.Angle(x2)) < MYEPSILON)) {
    5357    throw LinearDependenceException(__FILE__,__LINE__);
    5458  }
     
    9296
    9397
    94 Vector Plane::getNormal(){
     98Vector Plane::getNormal() const{
    9599  return *normalVector;
    96100}
    97101
    98 double Plane::getOffset(){
     102double Plane::getOffset() const{
    99103  return offset;
    100104}
     
    106110vector<Vector> Plane::getPointsOnPlane(){
    107111  std::vector<Vector> res;
     112  res.reserve(3);
    108113  // first point on the plane
    109   res[0] = getOffsetVector();
    110   // first is orthogonal to the plane...
    111   // an orthogonal vector to this one lies on the plane
     114  res.push_back(getOffsetVector());
     115  // get a vector that has direction of plane
    112116  Vector direction;
    113   direction.GetOneNormalVector(res[0]);
    114   res[1] = res[0]+direction;
    115   // get an orthogonal vector to direction and offset (lies on the plane)
    116   direction.VectorProduct(res[0]);
     117  direction.GetOneNormalVector(getNormal());
     118  res.push_back(res[0]+direction);
     119  // get an orthogonal vector to direction and normal (has direction of plane)
     120  direction.VectorProduct(getNormal());
    117121  direction.Normalize();
    118   res[2] = res[0] +direction;
     122  res.push_back(res[0] +direction);
    119123  return res;
    120124}
     
    178182
    179183Vector Plane::getClosestPoint(const Vector &point) const{
    180   Vector difference = distance(point) * (*normalVector);
    181   if(difference.IsZero()){
     184  double factor = point.ScalarProduct(*normalVector)-offset;
     185  if(fabs(factor) < MYEPSILON){
    182186    // the point itself lies on the plane
    183187    return point;
    184188  }
    185   // get the direction this vector is pointing
    186   double sign = difference.ScalarProduct(*normalVector);
    187   // sign cannot be zero, since normalVector and difference are both != zero
    188   sign = sign/fabs(sign);
    189   return (point - (sign * difference));
     189  Vector difference = factor * (*normalVector);
     190  return (point - difference);
    190191}
     192
     193// Operators
     194
     195ostream &operator << (ostream &ost,const Plane &p){
     196  ost << "<" << p.getNormal() << ";x> - " << p.getOffset() << "=0";
     197  return ost;
     198}
  • src/Plane.hpp

    r1513a74 rfa5a6a  
    1111#include <memory>
    1212#include <vector>
     13#include <iostream>
    1314#include "Space.hpp"
    1415#include "Exceptions/LinearDependenceException.hpp"
     
    2223public:
    2324  Plane(const Vector &y1, const Vector &y2, const Vector &y3) throw(LinearDependenceException);
    24   Plane(const Vector &y1, const Vector &y2, double _offset) throw(LinearDependenceException);
    25   Plane(const Vector &_normalVector, double _offset=0)  throw(ZeroVectorException);
     25  Plane(const Vector &y1, const Vector &y2, double _offset) throw(ZeroVectorException,LinearDependenceException);
     26  Plane(const Vector &_normalVector, double _offset)  throw(ZeroVectorException);
    2627  Plane(const Vector &_normalVector, const Vector &_offsetVector) throw(ZeroVectorException);
    2728  virtual ~Plane();
     
    3132   * returns normal Vector for a plane
    3233   */
    33   Vector getNormal();
     34  Vector getNormal() const;
    3435  /**
    3536   * returns the distance of the plane from the origin
    3637   */
    37   double getOffset();
     38  double getOffset() const;
    3839  /**
    3940   * returns a vector that points on the plane.
     
    6061};
    6162
     63std::ostream &operator<< (std::ostream &ost,const Plane& p);
     64
    6265#endif /* PLANE_HPP_ */
  • src/unittests/Makefile.am

    r1513a74 rfa5a6a  
    3030  MemoryAllocatorUnitTest \
    3131  MoleculeDescriptorTest \
     32  PlaneUnittest \
    3233  ObserverTest \
    3334  SingletonTest \
     
    7071  memoryusageobserverunittest.cpp \
    7172  MoleculeDescriptorTest.cpp \
     73  PlaneUnittest.cpp \
    7274  ObserverTest.cpp \
    7375  SingletonTest.cpp \
     
    102104  memoryusageobserverunittest.hpp \
    103105  MoleculeDescriptorTest.hpp \
     106  PlaneUnittest.hpp \
    104107  ObserverTest.hpp \
    105108  SingletonTest.hpp \
     
    168171MoleculeDescriptorTest_LDADD = ${ALLLIBS}
    169172
     173PlaneUnittest_SOURCES = UnitTestMain.cpp PlaneUnittest.cpp PlaneUnittest.hpp
     174PlaneUnittest_LDADD = ${ALLLIBS}
     175
    170176SingletonTest_SOURCES = UnitTestMain.cpp SingletonTest.cpp SingletonTest.hpp
    171177SingletonTest_LDADD = $(BOOST_LIB) ${BOOST_THREAD_LIB}
  • src/vector.cpp

    r1513a74 rfa5a6a  
    421421};
    422422
     423bool Vector::operator!=(const Vector& b) const
     424{
     425  return !IsEqualTo(b);
     426}
     427
    423428/** Sums vector \a to this lhs component-wise.
    424429 * \param a base vector
  • src/vector.hpp

    r1513a74 rfa5a6a  
    8989  // operators for mathematical operations
    9090  bool operator==(const Vector& b) const;
     91  bool operator!=(const Vector& b) const;
    9192  const Vector& operator+=(const Vector& b);
    9293  const Vector& operator-=(const Vector& b);
  • src/vector_ops.cpp

    r1513a74 rfa5a6a  
    126126    y = Plane(axis,a,0).getNormal();
    127127  }
    128   catch (LinearDependenceException &excp) {
     128  catch (MathException &excp) {
    129129    // The normal vector cannot be created if there is linar dependency.
    130130    // Then the vector to rotate is on the axis and any rotation leads to the vector itself.
Note: See TracChangeset for help on using the changeset viewer.