摆转曲面 (Swung Surface) 的数学原理与实现

摆转曲面是一种通过将轮廓曲线绕轴旋转并同时沿该轴移动而生成的曲面。这种曲面在几何建模和计算机图形学中具有重要应用,特别是在创建螺旋状物体和工业设计领域。

数学定义与原理

给定一条参数化的轮廓曲线 C(u)=(0,y(u),z(u))C(u) = (0, y(u), z(u))C(u)=(0,y(u),z(u)),其中 uuu 是曲线参数,通常取值范围为 [0,1][0, 1][0,1]。摆转曲面的生成过程包含两个同时进行的变换:

  1. ZZZ 轴的旋转变换
  2. 沿 ZZZ 轴的平移变换

最终的曲面方程可表示为:
S(u,v)=(y(u)cos⁡(v),y(u)sin⁡(v),z(u)+k⋅v)S(u,v) = (y(u)\cos(v), y(u)\sin(v), z(u) + k \cdot v)S(u,v)=(y(u)cos(v),y(u)sin(v),z(u)+kv)

其中:

  • uuu 是轮廓曲线的参数
  • vvv 是旋转角度参数,通常取值范围为 [0,2π][0, 2\pi][0,2π] 或更广
  • kkk 是螺距系数,控制每单位旋转角度沿 ZZZ 轴的移动量

这个方程可以理解为在圆柱坐标系中的表达:半径分量由 y(u)y(u)y(u) 控制,高度分量由 z(u)+k⋅vz(u) + k \cdot vz(u)+kv 控制。

基础实现:圆形轮廓的摆转曲面

首先实现一个基础版本,使用圆形作为轮廓曲线:
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def generate_swung_surface_basic(y_func, z_func, k=1.0, u_samples=50, v_samples=100):
    """
    生成基础摆转曲面
    
    参数:
    y_func: 轮廓曲线的y分量函数
    z_func: 轮廓曲线的z分量函数  
    k: 螺距系数
    u_samples: u参数的采样点数
    v_samples: v参数的采样点数
    """
    u = np.linspace(0, 1, u_samples)
    v = np.linspace(0, 4*np.pi, v_samples)
    
    U, V = np.meshgrid(u, v)
    
    # 计算曲面坐标
    Y = y_func(U)
    Z = z_func(U)
    
    X = Y * np.cos(V)
    Y = Y * np.sin(V)
    Z = Z + k * V
    
    return X, Y, Z

# 定义圆形轮廓函数
def circular_profile(u, radius=1.0):
    """圆形轮廓:y分量是常数,z分量线性变化"""
    return radius * np.ones_like(u), u

# 生成曲面
u_samples = 30
v_samples = 100
y_func = lambda u: circular_profile(u, 1.0)[0]
z_func = lambda u: circular_profile(u, 1.0)[1]

X, Y, Z = generate_swung_surface_basic(y_func, z_func, k=0.2, u_samples=u_samples, v_samples=v_samples)

# 可视化
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X, Y, Z, alpha=0.8, cmap='viridis')

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('基本摆转曲面 - 圆形轮廓')
plt.show()

高级实现:任意轮廓曲线的摆转曲面

下面实现一个更通用的版本,支持任意参数化轮廓曲线:
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值