File indexing completed on 2026-04-09 07:49:44
0001 #pragma once
0002
0003 #include <string>
0004 #include <sstream>
0005 #include <glm/glm.hpp>
0006
0007 struct SPlaceRing
0008 {
0009 unsigned idx ;
0010 double z ;
0011 double costh ;
0012 double sinth ;
0013 double circ ;
0014 unsigned num ;
0015
0016 std::string desc() const ;
0017 static std::string Desc(const SPlaceRing* rr, unsigned num_ring);
0018 double phi(unsigned item_idx) const ;
0019 glm::tvec3<double> upoint(unsigned item_idx);
0020 };
0021
0022
0023 inline std::string SPlaceRing::desc() const
0024 {
0025 std::stringstream ss ;
0026 ss << "SPlaceRing::desc "
0027 << " idx " << std::setw(5) << idx
0028 << " z " << std::fixed << std::setw(15) << std::setprecision(5) << z
0029 << " circ " << std::fixed << std::setw(15) << std::setprecision(5) << circ
0030 << " num " << std::setw(5) << num
0031 ;
0032
0033 std::string s = ss.str();
0034 return s ;
0035 }
0036 inline std::string SPlaceRing::Desc(const SPlaceRing* rr, unsigned num_ring)
0037 {
0038 std::stringstream ss ;
0039 for(unsigned i=0 ; i < num_ring ; i++ ) ss << rr[i].desc() << std::endl ;
0040 std::string s = ss.str();
0041 return s ;
0042 }
0043 inline double SPlaceRing::phi(unsigned item_idx) const
0044 {
0045 assert( item_idx < num );
0046 return 2.*glm::pi<double>()*double(item_idx)/double(num-1 ) ;
0047 }
0048
0049 inline glm::tvec3<double> SPlaceRing::upoint(unsigned item_idx )
0050 {
0051 double ph = phi(item_idx);
0052
0053 glm::tvec3<double> pt ;
0054 pt.x = sinth*cos(ph) ;
0055 pt.y = sinth*sin(ph) ;
0056 pt.z = costh ;
0057 return pt ;
0058 }
0059
0060