.. role:: blue :class: blue Силуэтная кривая MbSilhouetteCurve ================================== .. _MbSilhouetteCurve_Silhouette_Curve: .. версия ядра: Класс :blue:`MbSilhouetteCurve` объявлен в файле *cur_silhouette_curve.h*. Силуэтная кривая поверхности MbSilhouetteCurve является наследником кривой на поверхности :ref:`MbSurfaceCurve `. Силуэтная кривая описывается поверхностью :ref:`MbSurface ` **surface**, двумерной кривой :ref:`MbCurve ` **curve** в пространстве параметров поверхности, признаком периодичности кривой **closed**, признаком перспективы *perspective*, вектором взгляда **eye** и типом кривой **species**. У кривой есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов кривой. Силуэтная кривая представляет собой кривую на поверхности *surface*, разделяющую видимую из точки наблюдения часть этой поверхности и невидимую из точки наблюдения часть этой поверхности. Если *perspective = true*, то точку наблюдения описывает вектор взгляда **eye**. Если *perspective = false*, то точка наблюдения находится на бесконечном расстоянии, а вектор взгляда *eye* описывает направление из точки наблюдения к поверхности. Нормаль поверхности *surface* на силуэтной кривой ортогональна прямой линии, соединяющей эту точку поверхности и точку наблюдения. В частном случае, когда можно построить точную силуэтную кривую поверхности, тип кривой *species* принимает значение *cbt_Ordinary*. Например, для сферы силуэтной кривой служит окружность. В частном случае строится точная пространственная кривая *exactCurve*, которая точно описывает силуэт поверхности и используется для вычисления радиуса-вектора силуэтной кривой и его производных. В общем случае тип кривой *species* принимает значение *cbt_Specific*, двумерная кривая *curve* является сплайном и аппроксимирует силуэт поверхности. В общем случае точка силуэтной кривой вычисляется итерационным методом, использующим двумерную кривую *curve* в качестве начального приближения. Область определения параметров силуэтной кривой поверхности совпадает с областью определения параметров двумерной кривой *curve*. В методе :blue:`PointOn`\( double & *t*, :blue:`MbCartPoint3D` & *r* ) радиус-вектор кривой *r* описывается векторной функцией .. math:: \mathbf{r}(t) = \mathbf{surface}(u, v), где *u*, *v* -- координаты двумерной точки, начальное приближение которой вычисляется методом *curve* → :blue:`PointOn`\( *t*, *point* ), *u = point.x*, *v = point.y*. Далее параметры *u* и *v* уточняются итерационным методом, использующим уравнение .. math:: \mathbf{vector}\cdot\mathbf{n}(u, v) = 0, где *n(u, v)* -- нормаль поверхности, которая вычисляется методом *surface* → :blue:`Normal`\( *u, v*, *n* ), *vector* -- вектор взгляда (для бесконечно удалённой точки наблюдения *vector = eye*). Силуэтная кривая поверхности тора приведена на рис. 1: .. figure:: /MODELER/CURVES/pictures/O.4.21.1.png :width: 9cm :align: center Рис. 1 Силуэтная кривая поверхности тора с другого направления приведена на рис. 2: .. figure:: /MODELER/CURVES/pictures/O.4.21.2.png :width: 9cm :align: center Рис. 2 При переходе через силуэтную кривую скалярное произведение вектора нормали поверхности и вектора взгляда меняет знак. Силуэтная кривая всегда или замкнута, или начинается и оканчивается на краях поверхности. Силуэтная кривая используется для построения проекций силуэта криволинейной поверхности на плоскость.