Создание 3D точки на поверхности

Автор ural_su, 08.11.13, 16:55:36

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

ural_su

Пытаюсь создать точку на сфере с помощью интерфейса IPoint3D и параметров IPoint3DParamSurfacePtr и возникла проблема с указанием типа смещения (мне необходимо выбрать по координатам на сфере) а в перечислении
ksPoint3DSurfaceParamTypeEnum
{
    ksOffsetByUV = 1,
    ksOffsetByLenFromObj = 2
};
их только два. В sdk вообще указывают на другой тип смещения
Цитировать
Тип заданния смещения.

Тип данных - из перечисления ksPoint3DCurveParamTypeEnum.
хотя функция PutOffsetType принимает параметр типа ksPoint3DSurfaceParamTypeEnum. Что это ошибка интерфейса или я его не правильно использую?

08.11.13, 17:16:17 #1 Последнее редактирование: 08.11.13, 18:07:41 от Sabahs
Если я правильно понимаю для точки на сфере ksOffsetByUV задаёте U и V, точнее Offset1 и Offset2 в процентах от 0...100 min...max, а для ksOffsetByLenFromObj в угловых величинах, но это догадка, тут нужно пробовать.
Можете попробовать поставить IPoint3D::ParameterType - ksPoint3DTypeEnum ksPSphericCoord - 9 По сферическим координатам и в координаты забить X=A, Y=R, Z=B может, что выйдет.


ural_su

конечно можно и так, можно и проще
newPoint->ParameterType = ksPSphericCoord;
IPoint3DParamBySpherePtr param = newPoint->Parameters;
param->A = a;
param->B = b;
param->R = r;
newPoint->Update();
Но суть в том что при перестроении сферы (изменения ее радиуса) точки останутся висеть на прежнем месте, а хотелось б привязать их к поверхности. Причем ручкам их можно привязать, а программно получается что нет.

На поверхности можно через U и V, фактически A и B только в процентах.

ural_su

хм интересно, стоит попробовать. Спасибо.  Надо будет только подумакать как углы в проценты перевести

Пропорцией.
U=(100*A)/(2*Pi)=50*A/Pi
V=50*B/Pi
+ Благодарностей: 1

ural_su

не понятно как определяется направление векторов u и v. Они получаются смещены относительно СК и противоположнонаправлены. Проще  получается задать точку через смещение относительно плоскостей ZY и ZX

ural_su

все разобрался спасибо. Оказывается у IPoint3DParamBySphere есть свойство RadiusObject  позволяющее устанавливать объект, задающий радиус.

Всё зависит от поверхности, u и v могут иметь знак направления, чтобы разобраться нужно получить интерфейс ISurface - математической поверхности в трехмерном пространстве, методами которого можно узнать всю информацию.

ural_su