76 float uangle = u / m_sphere->Radius();
77 float cosu = std::cos(uangle);
78 float sinu = std::sin(uangle);
79 float radius = sinu * m_sphere->Radius();
80 float vangle = v / radius;
81 float sinv = std::sin(vangle);
82 float cosv = std::cos(vangle);
85 *p = m_sphere->Radius() *
Vec3f(g) + m_sphere->Center();
114 float minUangle =
float(
M_PI), maxUangle = 0;
115 if (end - begin <= 1)
119 for (IteratorT i = begin; i != end; ++i)
121 Vec3f s = *i - m_sphere->Center();
122 float slength = s.length();
129 float uangle = std::acos(h);
130 if (minUangle > uangle)
134 if (maxUangle < uangle)
139 float centerUangle = (minUangle + maxUangle) / 2;
143 -2 * (centerUangle -
float(
M_PI / 2)), m_frame[0][0], m_frame[0][1], m_frame[0][2]);
145 q.Rotate(m_frame[2], &newNormal);
146 m_frame.FromNormal(newNormal);
151 for (IteratorT i = begin; i != end; ++i)
153 Vec3f s = *i - m_sphere->Center();
154 float slength = s.length();
162 float uangle = std::acos(l[2]);
163 if (uangle * m_sphere->Radius() <
float(
M_PI) * m_sphere->Radius() - 2 * epsilon &&
164 uangle * m_sphere->Radius() >
float(-
M_PI) * m_sphere->Radius() + 2 * epsilon)
166 vangles.
push_back(std::atan2(l[1], l[0]));
169 std::sort(vangles.
begin(), vangles.
end());
173 for (
size_t i = 1; i < vangles.
size(); ++i)
175 float gap = vangles[i] - vangles[i - 1];
179 lower = vangles[i - 1];
185 float rotationAngle = (lower + upper) / 2;
186 m_frame.RotateOnNormal(rotationAngle +
float(
M_PI));
void WrapComponents(const GfxTL::AABox< GfxTL::Vector2Df > &bbox, float epsilon, size_t uextent, size_t vextent, MiscLib::Vector< int > *componentImg, MiscLib::Vector< std::pair< int, size_t > > *labels) const