matlab - 如何参数化弯曲圆柱体?

标签 matlab geometry

我想生成一个弯曲的圆柱体。例如,轴是正弦曲线或圆。

curved cylinder

我可以得到一个直圆柱体如下

% Parameters
r=5; l=5; nTheta=100;

theta = 2*pi*(linspace(0,1,nTheta+1));
x = r * cos(theta);
x(end) = [];    % Last element is same as first. So, just remove it
y = r * sin(theta);
y(end) = [];
z = repmat((0:l-1)', 1, nTheta);

% Plot
surf(repmat(x,l,1),repmat(y,l,1),z); 

给出一个圆柱cylinder如果将第 9 行更改为

z = (0:l-1)' * sin(linspace(-pi,pi,nTheta));

我认为应该给我一个以正弦曲线为轴的圆柱体。但是,它给了我 curved wrong现在,我知道参数化是错误的。使圆柱体沿正弦轴为轴的正确参数化是什么?

最佳答案

抱歉,我没有 Matlab,但这是一个 Mathematica 模拟软件。我想你可以翻译它

而不是像 answer of Savithru 中展示的那样有一个倾斜的圆柱体,我们可以做遵循给定曲线的版本。

本质上,您需要的是一组与您尝试遵循的曲线 f(x) 正交的圆。首先,让我们定义一个圆:

圆圈:

假设一个半径为 R 的圆在垂直于单位向量 w=(w1,w2,w3) 的平面内,它通过点 (X0, Y0,Z0)。该平面由垂直于 w< 的两个单位向量 u=(u1,u2,u3)v=(v1,v2,v3) 定义。圆的参数方程为:

x = X0 + R cos(theta) u1 + R sin(theta) v1
y = Y0 + R cos(theta) u2 + R sin(theta) v2
z = Z0 + R cos(theta) u3 + R sin(theta) v3

其中 theta 在 0 到 2π 的区间内变化。

现在我们定义了圆,让我们定义管。

pipe :

要定义一个曲面,我们需要两个参数,第一个是圆的 theta。如果我们想跟随 f(x),第二个将是 x。我们需要做的就是定义正交向量 uv。我们知道它们正交于单位向量w,这不过是f(x)的一阶导数的切线。因此你可以定义:

w = Normalize[{1,f'(x),0}]
u = Normalize[Cross[w,{0,0,1}]]
v = Cross[w,u]

所以你的参数方程变成:

x = x    + R cos(theta) u1(x) + R sin(theta) v1(x)
y = f(x) + R cos(theta) u2(x) + R sin(theta) v2(x)
z = 0    + R cos(theta) u3(x) + R sin(theta) v3(x)

在 Mathematica 中是这样写的:

R=1
f[x_] := Sin[x]
w[x_] := Normalize[{1, f'[x], 0}]
u[x_] := Normalize[Cross[w[x], {0, 0, 1}]]
v[x_] := Cross[w[x], u[x]]
ParametricPlot3D[{x, f[x], 0} + R Cos[t] u[x] + R Sin[t] v[x], {x, 0, 2 Pi}, {t, 0, 2 Pi}]

enter image description here

注意:您可以使用从切线、法线和双法线向量构建的 Frenet-Serret 框架轻松扩展它,用于 3D 空间中的曲线f(r)

关于matlab - 如何参数化弯曲圆柱体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53999426/

相关文章:

C++ .lib 文件到 mex

matlab - 如何使用matlab计算列中数字的相同值

matlab - 包含 MATLAB 图轴的框中缺少黑线

c++ - 找出一个点位于沿对角线分割的矩形内的哪个扇区

html - 如何使放置在按钮内的unicode变大?

numpy - 来自连接点网络的多边形

python - Skimage regionprops 特征的(面积,euler_number)尺寸在 Python 中不正确

maps - 在 Matlab GUI 中设置 map 轴的父级

java - 在不知道其引用的情况下删除 Shape (javafx)

algorithm - 逆时针排列凹多边形顶点