Силуэтная кривая 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 описывается векторной функцией
где u, v – координаты двумерной точки, начальное приближение которой вычисляется методом curve → PointOn( t, point ), u = point.x, v = point.y. Далее параметры u и v уточняются итерационным методом, использующим уравнение
где n(u, v) – нормаль поверхности, которая вычисляется методом surface → Normal( u, v, n ), vector – вектор взгляда (для бесконечно удалённой точки наблюдения vector = eye).
Силуэтная кривая поверхности тора приведена на рис. 1:
Рис. 1
Силуэтная кривая поверхности тора с другого направления приведена на рис. 2:
Рис. 2
При переходе через силуэтную кривую скалярное произведение вектора нормали поверхности и вектора взгляда меняет знак. Силуэтная кривая всегда или замкнута, или начинается и оканчивается на краях поверхности. Силуэтная кривая используется для построения проекций силуэта криволинейной поверхности на плоскость.