Converting a 2D Sphere Coordinate Into a 3D Normal.
You know when you make a 3D sphere how your making 2D circle and changing its radius by a sine wave that means you have a 2D coordinate like latitude and longitude. I need to make it in to a 3D normal how do I do this is there any site that that would tell me how? if so please give me a link. or if you have any ideas or can help me describe this better.
Quote:Original post by EmptyVoidA Google search for 'spherical coordinate conversion' should turn up some good references. Meanwhile, here's the 'spherical to Cartesian' function from the CML:
You know when you make a 3D sphere how your making 2D circle and changing its radius by a sine wave that means you have a 2D coordinate like latitude and longitude. I need to make it in to a 3D normal how do I do this is there any site that that would tell me how? if so please give me a link. or if you have any ideas or can help me describe this better.
/* Convert spherical coordinates to Cartesian coordinates in R3 */template < typename E, class A > voidspherical_to_cartesian(E radius, E theta, E phi, size_t axis, SphericalType type, vector<E,A>& v){ typedef vector<E,A> vector_type; typedef typename vector_type::value_type value_type; /* Checking */ detail::CheckVec3(v); detail::CheckIndex3(axis); if (type == latitude) { phi = constants<value_type>::pi_over_2() - phi; } value_type sin_phi = std::sin(phi); value_type cos_phi = std::cos(phi); value_type sin_phi_r = sin_phi * radius; // Note: cyclic_permutation() computes i, j, and k as follows: // i = axis // j = (i + 1) % 3 // k = (j + 1) % 3 size_t i, j, k; cyclic_permutation(axis, i, j, k); v = cos_phi * radius; v[j] = sin_phi_r * std::cos(theta); v[k] = sin_phi_r * std::sin(theta);}
The 'axis' argument indicates which cardinal axis (0 = x, 1 = y, 2 = z) should be considered 'up', and the 'type' argument determines whether 'phi' should be interpreted as latitude or colatitude.
I have little clue what you're talking about in most of your post. However, for a sphere, the normal at a certain point is just the vector from the origin to that point normalized.
edit: somehow didn't notice above post.
edit: somehow didn't notice above post.
Quote:Original post by jykQuote:Original post by EmptyVoidA Google search for 'spherical coordinate conversion' should turn up some good references. Meanwhile, here's the 'spherical to Cartesian' function from the CML:
You know when you make a 3D sphere how your making 2D circle and changing its radius by a sine wave that means you have a 2D coordinate like latitude and longitude. I need to make it in to a 3D normal how do I do this is there any site that that would tell me how? if so please give me a link. or if you have any ideas or can help me describe this better.
*** Source Snippet Removed ***
The 'axis' argument indicates which cardinal axis (0 = x, 1 = y, 2 = z) should be considered 'up', and the 'type' argument determines whether 'phi' should be interpreted as latitude or colatitude.
Wow just looked and man I've been getting very helpful posts lately I didn't look until now because I thought it would be "just google it" or something but this is really helpful thanks. and yeah I don't make much since to my self most of the time sorry I just have bad communication skills.
OK... I don't really understand. This is as much as I can guess
[EDIT]
[Edited by - EmptyVoid on July 16, 2007 8:21:47 PM]
float* spherical_to_normal(float x, float y){float v[3];v[0] = sin(x);v[1] = y;v[2] = cos(x);return v;}float* normal_to_spherical(float x, float y, float z){float v[2];v[0] = //don't know what goes herev[1] = //don't know what goes herereturn v;}
[EDIT]
[Edited by - EmptyVoid on July 16, 2007 8:21:47 PM]
Quote:Original post by EmptyVoidWhat language is that?
*** Source Snippet Removed ***
Anyway, I posted code earlier for converting spherical coordinates (e.g. latitude and longitude) to Cartesian coordinates (e.g. a '3D normal'). Was that not what you were looking for?
It's C++ what language are you using? and yes that was exactly what I was looking for also I realized I need the opposite a 3D coordinate to a 2D one sorry my bad.
[Edited by - EmptyVoid on July 16, 2007 6:06:38 PM]
[Edited by - EmptyVoid on July 16, 2007 6:06:38 PM]
Quote:Original post by EmptyVoidHere's the function for converting in the opposite direction:
It's C++ what language are you using? and yes that was exactly what I was looking for also I realized I need the opposite a 3D coordinate to a 2D one sorry my bad.
/* Convert Cartesian coordinates to spherical coordinates in R3 */template < class VecT, typename Real > voidcartesian_to_spherical(const VecT& v, Real& radius, Real& theta, Real& phi, size_t axis, SphericalType type, Real tolerance = epsilon<Real>::placeholder()){ typedef Real value_type; /* Checking */ detail::CheckVec3(v); detail::CheckIndex3(axis); size_t i, j, k; cyclic_permutation(axis, i, j, k); value_type len = length(v[j],v[k]); theta = len < tolerance ? value_type(0) : std::atan2(v[k],v[j]); radius = length(v, len); if (radius < tolerance) { phi = value_type(0); } else { phi = std::atan2(len,v); //phi = type.convert(phi); if (type == latitude) { phi = constants<value_type>::pi_over_2() - phi; } }}
Also, as alluded to earlier, the code you posted appears to contain several syntax and programming errors.
Is that better? also I don't know what most of those functions do can you make that with the C++ math library "math.h" as I said not very good with C++ more of a VB person. if not how do I use the code above is it a function? or is it some from of cool data type converter that I had no idea C++ could do? also this is the error I get when I run the code:
------ Build started: Project: nam, Configuration: Debug Win32 ------
Compiling...
nam.cpp
c:\documents and settings\steven batchelor\my documents\visual studio 2005\projects\nam\nam\nam.cpp(16) : error C2061: syntax error : identifier 'SphericalType'
Build log was saved at "file://c:\Documents and Settings\Steven Batchelor\My Documents\Visual Studio 2005\Projects\nam\nam\Debug\BuildLog.htm"
nam - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
[Edited by - EmptyVoid on July 16, 2007 8:29:56 PM]
------ Build started: Project: nam, Configuration: Debug Win32 ------
Compiling...
nam.cpp
c:\documents and settings\steven batchelor\my documents\visual studio 2005\projects\nam\nam\nam.cpp(16) : error C2061: syntax error : identifier 'SphericalType'
Build log was saved at "file://c:\Documents and Settings\Steven Batchelor\My Documents\Visual Studio 2005\Projects\nam\nam\Debug\BuildLog.htm"
nam - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
[Edited by - EmptyVoid on July 16, 2007 8:29:56 PM]
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement