Changes in src/Shapes/BaseShapes.cpp [bf3817:bcf653]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/Shapes/BaseShapes.cpp
rbf3817 rbcf653 1 /* 2 * Project: MoleCuilder 3 * Description: creates and alters molecular systems 4 * Copyright (C) 2010 University of Bonn. All rights reserved. 5 * Please see the LICENSE file or "Copyright notice" in builder.cpp for details. 6 */ 7 1 8 /* 2 9 * BaseShapes_impl.cpp … … 16 23 #include "Shapes/BaseShapes_impl.hpp" 17 24 25 #include <cmath> 26 27 #include "Helpers/Assert.hpp" 18 28 #include "LinearAlgebra/Vector.hpp" 19 29 … … 21 31 return point.NormSquared()<=1; 22 32 } 33 34 35 /** 36 * algorithm taken from http://www.cgafaq.info/wiki/Evenly_distributed_points_on_sphere 37 * \param N number of points on surface 38 */ 39 std::vector<Vector> Sphere_impl::getHomogeneousPointsOnSurface(const int N) const { 40 std::vector<Vector> PointsOnSurface; 41 42 const double dlength = M_PI*(3.-sqrt(5.)); 43 double length = 0; 44 const double dz = 2.0/N; 45 double z = 1. - dz/2.; 46 Vector point; 47 for (int ka = 0; ka<N; ka++){ 48 const double r = sqrt(1.-z*z); 49 point.Zero(); 50 point[0] = cos(length)*r; 51 point[1] = sin(length)*r; 52 point[2] = z; 53 PointsOnSurface.push_back(point); 54 z = z - dz; 55 length = length + dlength; 56 } 57 58 ASSERT(PointsOnSurface.size() == N, "Sphere_impl::getHomogeneousPointsOnSurface() did not create enough points."); 59 return PointsOnSurface; 60 } 61 23 62 24 63 Shape Sphere(){ … … 28 67 29 68 bool Cuboid_impl::isInside(const Vector &point){ 30 return point[0]<=1 && point[1]<=1 && point[2]<=1; 69 return (point[0]>=0 && point[0]<=1) && (point[1]>=0 && point[1]<=1) && (point[2]>=0 && point[2]<=1); 70 } 71 72 /** 73 * \param N number of points on surface 74 */ 75 std::vector<Vector> Cuboid_impl::getHomogeneousPointsOnSurface(const int N) const { 76 std::vector<Vector> PointsOnSurface; 77 ASSERT(false, "Cuboid_impl::getHomogeneousPointsOnSurface() not implemented yet"); 78 return PointsOnSurface; 31 79 } 32 80 33 81 Shape Cuboid(){ 34 Shape::impl_ptr impl = Shape::impl_ptr(new Sphere_impl());82 Shape::impl_ptr impl = Shape::impl_ptr(new Cuboid_impl()); 35 83 return Shape(impl); 36 84 }
Note:
See TracChangeset
for help on using the changeset viewer.