git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@641 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
145
tools/pymol_asphere/src/spherical.cpp
Executable file
145
tools/pymol_asphere/src/spherical.cpp
Executable file
@ -0,0 +1,145 @@
|
||||
/***************************************************************************
|
||||
spherical.cpp
|
||||
W. Michael Brown
|
||||
-------------------
|
||||
|
||||
Stuff for working spherical coordinates
|
||||
|
||||
__________________________________________________________________________
|
||||
|
||||
Part of the Math Library
|
||||
__________________________________________________________________________
|
||||
|
||||
begin : Tue Aug 29 2006
|
||||
copyright : (C) 2006 by W. Michael Brown
|
||||
email : wmbrown@sandia.gov
|
||||
***************************************************************************/
|
||||
|
||||
#include "spherical.h"
|
||||
|
||||
template class Ball<double>;
|
||||
template class Ball<float>;
|
||||
template ostream & operator<< <double>(ostream &out, const Ball<double> &t);
|
||||
template ostream & operator<< <float>(ostream &out, const Ball<float> &t);
|
||||
template istream & operator>> <double>(istream &in, Ball<double> &t);
|
||||
template istream & operator>> <float>(istream &in, Ball<float> &t);
|
||||
|
||||
// Empty construct. Not necessarily initialized to [0 0]
|
||||
template<class numtyp>
|
||||
Ball<numtyp>::Ball() {
|
||||
}
|
||||
|
||||
// Assign theta and phi to the value
|
||||
template<class numtyp>
|
||||
Ball<numtyp>::Ball(numtyp value) : theta(value), phi(value) {
|
||||
}
|
||||
|
||||
// Assignment Constructor
|
||||
template<class numtyp>
|
||||
Ball<numtyp>::Ball(numtyp thet, numtyp ph) : theta(thet), phi(ph) {
|
||||
}
|
||||
|
||||
// Convert from cartesian
|
||||
template<class numtyp>
|
||||
Ball<numtyp>::Ball(const ThreeD<numtyp> &pt) {
|
||||
theta=atan2(pt.y,pt.x);
|
||||
if (theta<0)
|
||||
theta+=TWOPI;
|
||||
phi=acos(pt.z/pt.norm());
|
||||
}
|
||||
|
||||
template<class numtyp>
|
||||
numtyp & Ball<numtyp>::operator[](unsigned i) {
|
||||
if (i==THETA)
|
||||
return theta;
|
||||
else
|
||||
return phi;
|
||||
}
|
||||
|
||||
template<class numtyp>
|
||||
ostream & operator<< (ostream &out, const Ball<numtyp> &t) {
|
||||
out << t.theta << " " << t.phi;
|
||||
return out;
|
||||
}
|
||||
|
||||
template<class numtyp>
|
||||
istream & operator>> (istream &in, Ball<numtyp> &t) {
|
||||
in >> t.theta >> t.phi;
|
||||
return in;
|
||||
}
|
||||
|
||||
// Distance between two points (along arc)
|
||||
template<class numtyp>
|
||||
numtyp Ball<numtyp>::dist(const Ball &two) const {
|
||||
double dot=cPt(*this).dot(cPt(two));
|
||||
if (dot>1.0)
|
||||
dot=1.0;
|
||||
return acos(dot);
|
||||
}
|
||||
|
||||
// Distance squared between two points
|
||||
template<class numtyp>
|
||||
numtyp Ball<numtyp>::dist2(const Ball &two) const {
|
||||
numtyp d=dist(two);
|
||||
return d*d;
|
||||
}
|
||||
|
||||
// Add both angles
|
||||
template<class numtyp>
|
||||
void Ball<numtyp>::operator += (const Ball<numtyp> &two) {
|
||||
theta+=two.theta;
|
||||
phi+=two.phi;
|
||||
}
|
||||
|
||||
// Add to both angles
|
||||
template<class numtyp>
|
||||
Ball<numtyp> Ball<numtyp>::operator + (const numtyp two) const {
|
||||
return Ball(theta+two,phi+two);
|
||||
}
|
||||
|
||||
// Multiply both angles
|
||||
template<class numtyp>
|
||||
Ball<numtyp> Ball<numtyp>::operator * (const numtyp two) const {
|
||||
return Ball(theta*two,phi*two);
|
||||
}
|
||||
|
||||
// Divide both angles
|
||||
template<class numtyp>
|
||||
void Ball<numtyp>::operator /= (const numtyp two) {
|
||||
theta/=two;
|
||||
phi/=two;
|
||||
}
|
||||
|
||||
// Add both angles
|
||||
template<class numtyp>
|
||||
Ball<numtyp> Ball<numtyp>::operator + (const Ball<numtyp> &two) {
|
||||
return Ball(theta+two.theta,phi+two.phi);
|
||||
}
|
||||
|
||||
// Move coordinates into array
|
||||
template<class numtyp>
|
||||
void Ball<numtyp>::to_array(numtyp *array) {
|
||||
*array=theta;
|
||||
array++;
|
||||
*array=phi;
|
||||
}
|
||||
|
||||
// Set coordinates from array
|
||||
template<class numtyp>
|
||||
void Ball<numtyp>::from_array(numtyp *array) {
|
||||
theta=*array;
|
||||
array++;
|
||||
phi=*array;
|
||||
}
|
||||
|
||||
// Returns 2
|
||||
template<class numtyp>
|
||||
unsigned Ball<numtyp>::dimensionality() {
|
||||
return 2;
|
||||
}
|
||||
|
||||
// Returns true
|
||||
template<class numtyp>
|
||||
bool Ball<numtyp>::check_bounds(numtyp min,numtyp max) {
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user