Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/Shapes/BaseShapes.cpp

    r57f243 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
    18/*
    29 * BaseShapes_impl.cpp
     
    613 */
    714
     15// include config.h
     16#ifdef HAVE_CONFIG_H
     17#include <config.h>
     18#endif
     19
     20#include "Helpers/MemDebug.hpp"
     21
    822#include "Shapes/BaseShapes.hpp"
    923#include "Shapes/BaseShapes_impl.hpp"
    1024
     25#include <cmath>
     26
     27#include "Helpers/Assert.hpp"
    1128#include "LinearAlgebra/Vector.hpp"
    1229
     
    1431  return point.NormSquared()<=1;
    1532}
     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 */
     39std::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
    1662
    1763Shape Sphere(){
     
    2167
    2268bool Cuboid_impl::isInside(const Vector &point){
    23   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 */
     75std::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;
    2479}
    2580
    2681Shape Cuboid(){
    27   Shape::impl_ptr impl = Shape::impl_ptr(new Sphere_impl());
     82  Shape::impl_ptr impl = Shape::impl_ptr(new Cuboid_impl());
    2883  return Shape(impl);
    2984}
Note: See TracChangeset for help on using the changeset viewer.