cgal python intersection - 试图 return 比三角形更复杂的多边形
cgal python intersection - trying to return a polygon more complex than a triangle
我想交叉两个形状,return计算两者之间的重叠。这必须包括重叠非常复杂的形状(即不仅仅是三角形)。最终我想在 3D 中执行此操作,但我 运行 遇到了同样的问题,即使我将其简化为 2D,我也无法恢复结果形状,因为它与任何基本 "is_foo" 的模板函数
CGAL::Object。
代码如下。请注意,使用的两个三角形应该 return 一个不规则四边形 ((0.75, 0.0), (0.25, 0.0), (0.0, 1.0), (0.8, 0.2))
from CGAL.CGAL_Kernel import Point_2
from CGAL.CGAL_Kernel import Triangle_2
import CGAL.CGAL_Kernel as CGAL_Kernel
tri1=Triangle_2( *[Point_2(*acoord) for acoord in [[0,0],[1,0],[0,1]] ] )
tri2=Triangle_2( *[Point_2(*acoord) for acoord in [[1,1],[0.5,-1],[0,1]] ] )
intersection=CGAL_Kernel.intersection(tri1,tri2)
print(intersection.empty()) ### FALSE
print(intersection.is_Point_2()) ### FALSE
print(intersection.is_Triangle_2()) ### FALSE
print(intersection.is_Segment_2()) ### FALSE
print(intersection.is_Line_2()) ### FALSE
print(intersection.is_Ray_2()) ### FALSE
有没有办法把我不明白的四边形弄出来?我是以错误的方式接近这个吗?提前致谢
查看 the documentation for intersections。你的路口其实是一个std::vector。在 C++ 中,你可以用
if (const std::vector<Point_2>* res = boost::get<std::vector<Point_2> >
(&*result)) {
std::cout << res.size() << std::endl;
}
但在 python 中,我认为在当前可用的版本中您不能。
我想交叉两个形状,return计算两者之间的重叠。这必须包括重叠非常复杂的形状(即不仅仅是三角形)。最终我想在 3D 中执行此操作,但我 运行 遇到了同样的问题,即使我将其简化为 2D,我也无法恢复结果形状,因为它与任何基本 "is_foo" 的模板函数 CGAL::Object。
代码如下。请注意,使用的两个三角形应该 return 一个不规则四边形 ((0.75, 0.0), (0.25, 0.0), (0.0, 1.0), (0.8, 0.2))
from CGAL.CGAL_Kernel import Point_2
from CGAL.CGAL_Kernel import Triangle_2
import CGAL.CGAL_Kernel as CGAL_Kernel
tri1=Triangle_2( *[Point_2(*acoord) for acoord in [[0,0],[1,0],[0,1]] ] )
tri2=Triangle_2( *[Point_2(*acoord) for acoord in [[1,1],[0.5,-1],[0,1]] ] )
intersection=CGAL_Kernel.intersection(tri1,tri2)
print(intersection.empty()) ### FALSE
print(intersection.is_Point_2()) ### FALSE
print(intersection.is_Triangle_2()) ### FALSE
print(intersection.is_Segment_2()) ### FALSE
print(intersection.is_Line_2()) ### FALSE
print(intersection.is_Ray_2()) ### FALSE
有没有办法把我不明白的四边形弄出来?我是以错误的方式接近这个吗?提前致谢
查看 the documentation for intersections。你的路口其实是一个std::vector。在 C++ 中,你可以用
if (const std::vector<Point_2>* res = boost::get<std::vector<Point_2> >
(&*result)) {
std::cout << res.size() << std::endl;
}
但在 python 中,我认为在当前可用的版本中您不能。