Силуэтная кривая MbSilhouetteCurve

Класс MbSilhouetteCurve объявлен в файле cur_silhouette_curve.h.

Силуэтная кривая поверхности MbSilhouetteCurve является наследником кривой на поверхности MbSurfaceCurve. Силуэтная кривая описывается поверхностью MbSurface surface, двумерной кривой MbCurve curve в пространстве параметров поверхности, признаком периодичности кривой closed, признаком перспективы perspective, вектором взгляда eye и типом кривой species. У кривой есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов кривой.

Силуэтная кривая представляет собой кривую на поверхности surface, разделяющую видимую из точки наблюдения часть этой поверхности и невидимую из точки наблюдения часть этой поверхности. Если perspective = true, то точку наблюдения описывает вектор взгляда eye. Если perspective = false, то точка наблюдения находится на бесконечном расстоянии, а вектор взгляда eye описывает направление из точки наблюдения к поверхности. Нормаль поверхности surface на силуэтной кривой ортогональна прямой линии, соединяющей эту точку поверхности и точку наблюдения.

В частном случае, когда можно построить точную силуэтную кривую поверхности, тип кривой species принимает значение cbt_Ordinary. Например, для сферы силуэтной кривой служит окружность. В частном случае строится точная пространственная кривая exactCurve, которая точно описывает силуэт поверхности и используется для вычисления радиуса-вектора силуэтной кривой и его производных.

В общем случае тип кривой species принимает значение cbt_Specific, двумерная кривая curve является сплайном и аппроксимирует силуэт поверхности. В общем случае точка силуэтной кривой вычисляется итерационным методом, использующим двумерную кривую curve в качестве начального приближения.

Область определения параметров силуэтной кривой поверхности совпадает с областью определения параметров двумерной кривой curve.

В методе PointOn( double & t, MbCartPoint3D & r ) радиус-вектор кривой r описывается векторной функцией

\[\mathbf{r}(t) = \mathbf{surface}(u, v),\]

где u, v – координаты двумерной точки, начальное приближение которой вычисляется методом curve → PointOn( t, point ), u = point.x, v = point.y. Далее параметры u и v уточняются итерационным методом, использующим уравнение

\[\mathbf{vector}\cdot\mathbf{n}(u, v) = 0,\]

где n(u, v) – нормаль поверхности, которая вычисляется методом surface → Normal( u, v, n ), vector – вектор взгляда (для бесконечно удалённой точки наблюдения vector = eye).

Силуэтная кривая поверхности тора приведена на рис. 1:

../../../../_images/O.4.21.1.png

Рис. 1

Силуэтная кривая поверхности тора с другого направления приведена на рис. 2:

../../../../_images/O.4.21.2.png

Рис. 2

При переходе через силуэтную кривую скалярное произведение вектора нормали поверхности и вектора взгляда меняет знак. Силуэтная кривая всегда или замкнута, или начинается и оканчивается на краях поверхности. Силуэтная кривая используется для построения проекций силуэта криволинейной поверхности на плоскость.