У меня есть некоторый набор точек, который проходит через vtkDelaunay2D (триангуляцию) и vtkSmoothPolyDataFilter (сглаживание), соответственно, получается отображаемая поверхность. Есть ли какая то возможность из этой поверхности получения значения Z по заданным X и Y?
Такой вопрос возник из-за необходимости интерполировать поверхность по другому заданному набору X и Y, но простая линейная интерполяция дает совершенно другую поверхность по геометрии, поэтому появилась идея брать точку из конкретной отображенной поверхности, но как это сделать варианта я не нашел.
Решил задачу с помощью использования vtkCellLocator, по сути решения строится луч и ищется пересечение поверхности с этим лучом. Может кому нибудь пригодится.
const auto smoothedPolyDataFilter = vtkSmartPointer<vtkSmoothPolyDataFilter>::New();
// настройка, обработка
smoothedPolyDataFilter->Update();
const auto cellLocator = vtkSmartPointer<vtkCellLocator>::New();
сellLocator->SetDataSet(smoothedPolyDataFilter->GetOutput());
cellLocator->BuildLocator();
auto x = 100.0, y = 100.0; // задаем x и y для которых ищем z
auto z_min = 0.0, z_max = 100.0; // минимальные и максимальные z поверхности
int subId;
double t, xyz[3], pcoords[3];
double rayStart[3] = { x, y, z_min }, rayEnd[3] = { x, y, z_max };
if (cellLocator->IntersectWithLine(
rayStart,
rayEnd,
0.0001,
t,
xyz,
pcoords,
subId
))
{
const auto z = xyz[2]; // получаем искомую z из поверхности
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
для класса String требуется перегрузить несколько операторов,возник вопрос с перегрузкой оператора ()(int,int) -возвращение подстроки объектаКак...
Всем приветВ общем, создал проект Windows Application С++
Есть расширение для хрома, которое обрабатывает все цвета на открытой вкладке и выводит их в popup, например вот так — rgb(192, 72, 72) и так далее