|
|
@ -28,14 +28,14 @@ Eigen::Vector4d cylinder_function_impl::map_param_to_point(pointer_wrapper<subfa |
|
|
const auto sin_u = std::sin(p.x()); |
|
|
const auto sin_u = std::sin(p.x()); |
|
|
const auto cos_v = std::cos(p.y()); |
|
|
const auto cos_v = std::cos(p.y()); |
|
|
const auto sin_v = std::sin(p.y()); |
|
|
const auto sin_v = std::sin(p.y()); |
|
|
return object->local_to_world * Eigen::Vector4d(cos_u * cos_v, sin_v, sin_u * cos_v, 1.0); |
|
|
return object->local_to_world * Eigen::Vector4d(cos_u * cos_v, sin_u * cos_v, sin_v, 1.0); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Eigen::Vector2d cylinder_function_impl::map_point_to_param(pointer_wrapper<subface> object, Eigen::Vector3d p) |
|
|
Eigen::Vector2d cylinder_function_impl::map_point_to_param(pointer_wrapper<subface> object, Eigen::Vector3d p) |
|
|
{ |
|
|
{ |
|
|
Eigen::Vector4d local_p = (object->world_to_local * Eigen::Vector4d{p.x(), p.y(), p.z(), 1.0}).normalized(); |
|
|
Eigen::Vector4d local_p = (object->world_to_local * Eigen::Vector4d{p.x(), p.y(), p.z(), 1.0}).normalized(); |
|
|
const auto u = std::atan2(local_p.z(), local_p.x()); |
|
|
const auto u = std::atan2(local_p.y(), local_p.x()); |
|
|
const auto v = std::asin(local_p.y()); |
|
|
const auto v = std::asin(local_p.z()); |
|
|
return Eigen::Vector2d{u, v}; |
|
|
return Eigen::Vector2d{u, v}; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -49,8 +49,8 @@ internal::constraint_curve_intermediate cylinder_function_impl::eval_du_constrai |
|
|
const auto cos_v = std::cos(p.y()); |
|
|
const auto cos_v = std::cos(p.y()); |
|
|
const auto sin_v = std::sin(p.y()); |
|
|
const auto sin_v = std::sin(p.y()); |
|
|
|
|
|
|
|
|
res.f = object->local_to_world * Eigen::Vector4d(cos_u * cos_v, sin_v, sin_u * cos_v, 1.0); |
|
|
res.f = object->local_to_world * Eigen::Vector4d(cos_u * cos_v, sin_u * cos_v, sin_v, 1.0); |
|
|
res.grad_f = object->local_to_world * Eigen::Vector4d(cos_u * -sin_v, cos_v, sin_u * -sin_v, 0.0); |
|
|
res.grad_f = object->local_to_world * Eigen::Vector4d(-sin_u * cos_v, cos_u * cos_v, 0, 0.0); |
|
|
|
|
|
|
|
|
return res; |
|
|
return res; |
|
|
} |
|
|
} |
|
|
@ -65,8 +65,8 @@ internal::constraint_curve_intermediate cylinder_function_impl::eval_dv_constrai |
|
|
const auto cos_v = std::cos(p.y()); |
|
|
const auto cos_v = std::cos(p.y()); |
|
|
const auto sin_v = std::sin(p.y()); |
|
|
const auto sin_v = std::sin(p.y()); |
|
|
|
|
|
|
|
|
res.f = object->local_to_world * Eigen::Vector4d(cos_u * cos_v, sin_v, sin_u * cos_v, 1.0); |
|
|
res.f = object->local_to_world * Eigen::Vector4d(cos_u * cos_v, sin_u * cos_v, sin_v, 1.0); |
|
|
res.grad_f = object->local_to_world * Eigen::Vector4d(-sin_u * cos_v, 0.0, cos_u * cos_v, 0.0); |
|
|
res.grad_f = object->local_to_world * Eigen::Vector4d(cos_u * -sin_v, sin_u * -sin_v, cos_v, 0.0); |
|
|
|
|
|
|
|
|
return res; |
|
|
return res; |
|
|
} |
|
|
} |
|
|
|