答案 0 :(得分:1)
如果我理解正确,您可以使用https://github.com/daavoo/pyntcloud并以.ply格式使用示例this cylinder来执行您想要的操作。
您可以加载圆柱体:
<td width="9%" height="5%">
<span title="{{val.customerTypeDescNM[$index]}}" ng-repeat="item in val.customerType.split(',') track by $index">{{item}}</span>
</td>
这是一个三角形网格,如下所示:
您可以按如下方式从网格生成点云(如果您已将圆柱体作为点云,则此步骤不是必需的):
from pyntcloud import PyntCloud
cylinder = PyntCloud.from_file("cylinder.ply")
现在看起来像这样:
现在我认为正确的方法是进行“饼图分割”。
您可以将(x,y,z)笛卡尔坐标转换为(ro,phi,z)圆柱坐标,如下所示:
n_points = 100000
cylinder = cylinder.get_sample(
"mesh_random_sampling",
n=n_points,
as_PyntCloud=True)
“phi”标量字段是一个值,用于识别您感兴趣的角度的每个点。可视化更具说明性:
您现在可以使用此phi值将点分成所需的段数:
cylinder.add_scalar_field("cylindrical_coords")
现在,cylinder.points [“segment”]具有唯一值,将每个点分配给“饼图段”。
可视化再次有助于理解“饼段”:
答案 1 :(得分:0)
得到:
- 基点O - 圆柱底座的中心,位于平面L
中
- 汽缸轴单位矢量N
- 平面L中的基矢量V,与某些切割方向共线
- 第二个基数U,垂直于N和V (U = N x V)
然后,对于云中的每个点P,将其投影到平面上并找到相应的向量
P' = P - N * ((P-O).dot.N)
W = P'-O
使用
获取平面中相对于V的角度(和扇区)angle = atan2(W.dot.U, W.dot.V)