如何在三角网格表面上放置/定义点?

5次浏览(最近30天)
汤姆恩格斯
汤姆恩格斯 2021年8月6日
评论道: 汤姆恩格斯2021年8月16日
大家好,,
我需要你的帮助和想法来解决以下问题。
我有一个由三角形组成的曲面。我知道节点的位置,以及节点和曲面的法向量(作为单位向量)。
例如,表面看起来是这样的:
然而,表面也可以是圆的,有孔在它或有一个完全自由的外部形状。在极端情况下,表面在空间中甚至是弯曲的(如球面)。
我现在想要在这个曲面上放置任意多的圆柱体,它们之间的距离总是最大的。
有人知道这是怎么做到的吗?
或者我如何在这个“曲面”上找到和定义点?
非常感谢和问候
汤姆
2的评论
汤姆恩格斯
汤姆恩格斯 2021年8月9日
以下情况是极端情况的一个例子:
对于一个圆柱体,我确定曲面的质心,并使用局部曲率检查是否可以将其放置在那里。

登录以发表评论。

公认的答案

达洛瓦
达洛瓦 2021年8月14日
这里有另一种方法,但只有在你没有观点的情况下才有效:
  • 选取等高线内的一个点(中心)
  • 将数据转换为极坐标
  • 按角排序
coord =负载(“coordVERTICIES.mat”);
coordVERTICES=coord.coordVERTICES;
xco = coordVERTICES (: 1:);
公司yco = coordVERTICES (: 2:);
zco = coordVERTICES (: 3:);
[x,y,z]=交易(xco(:)、yco(:)、zco(:);
[t,r]=cart2pol(x-均值(x),y-均值(y));%转换为极坐标系
[~,k]=排序(t);%这种角
x1=x(k);
y1=y(k);
dl =函数(diff (x1)、diff (y1));求点之间的距离
k1=发现(dl>0.01);%删除零距离(重复点)
gd =[2;元素个数(k1); x1 (k1);日元(k1)];%几何描述
dl=decsg(gd);%分解
[p,e,t]=initmesh(dl);建立一个新的网格
情节(x, y,“.g”%绘制所有点
持有在…上
地块(x(k),y(k))%绘制边界曲线
pdemesh (p, e, t)%画网格
情节(意味着(x),意味着(y),“ob”“markersize”,15,“线宽”,3)%形心
持有
平等的紧
1评论
汤姆恩格斯
汤姆恩格斯 2021年8月16日
你好,达洛娃,
非常感谢您的大力支持。有了这个想法,我可以毫无中断地为所有平面提供服万博1manbetx务。
问候
汤姆

登录以发表评论。

更多的答案(2)

达洛瓦
达洛瓦 2021年8月9日
如何简单的 griddata 使用 initmesh
t = 0: .2:5;
x = [t;t];%一些数据
y = [t * 0;t * 0 + 3];%一些数据
z=[sin(t);sin(1.2*t)];%一些数据
k =边界(x (:), y (:));简单地找到唯一的边界
x1=x(k(2:结束));%边界应为未闭合曲线
日元= y (k(2:结束);%边界应为未闭合曲线
gd =[2;元素个数(x1); x1(:);日元(:));%几何描述
dl=decsg(gd);%分解
[p,e,t]=initmesh(dl,“Hmax”, 0.1);%构建网格(控制网格大小)
z2 = griddata (x (:), y(,)、z (:), p(1:)、p (2:));找到每个点的Z坐标
pp.vertices=[p'z2(:)];为补丁创建结构体
pp.faces = t(1:3:)”;为补丁创建结构体
pp.facecolor =“r”为补丁创建结构体
h1=图3(x,y,z,“g”);
h2=补片(pp);
图例([h1(1)h2],“原始数据”“GridData/initmesh”
相同的
45视图(45岁)
使用笛卡尔/球面坐标系操作球面对象的元素
7评论
达洛瓦
达洛瓦 2021年8月12日
这里是另一个使用的例子 feeBoundary 。它可以找到自由边。分离内外边的问题仍然存在。
%生成数据
t = linspace(0, 2 *π,50);
(x1, y1) = pol2cart (t, 1);%的内在curvw
X2 = 2*x1 + 0.2*cos(5*t);%外曲线
y = 2*y + 0.2*sin(5*t);;%外曲线
x=零(numel(x1),10);%预先配置
y = x;
i=1:numel(x1)
x(我:)= linspace (x1(我),x2 (i), 10);%在曲线之间创建节点
y(我:)= linspace (y1 (i), y2(我),10);
结束
h =冲浪(x, y, x * 0);创建表面对象
p=surf2patch(h,“三角形”);%将曲面对象转换为面片
TR =三角(p.faces p.vertices);% trinagulation
v = p.vertices;
E = freeBoundary (TR);查找边界边
p、 顶点(:,1)=p.顶点(:,1)+5;%移动面片对象
补丁(p,“facecolor”“r”%显示三角形
线(v (E, 1) + 5 v (E, 2),“颜色”“g”“线宽”,2)% ree边界
视图(0,90)
相同的

登录以发表评论。


汤姆恩格斯
汤姆恩格斯 2021年8月13日
你好davora。谢谢你的回答和帮助。我目前从.stl文件中的数据创建网络如下:
coord =负载(“coordVERTICIES.mat”
coordVERTICES=coord.coordVERTICES;
xco = squeeze(coordVERTICES(:,1,:))';
yco=挤压(坐标顶点(:,2,:)';
zco=挤压(坐标顶点(:,3,:)';
补丁(xco公司yco zco,“k”“EdgeColor”“k”“FaceColor”“#a8afb3”);
平等的紧
不幸的是,如果我正确理解Freebound命令,它仅限于对二维曲面进行网格划分。因此,考虑曲率是不可能的。
你知道我如何以不同的方式在曲面上高效地创建点吗?
汤姆问候

s manbetx 845


释放

R2020b

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!