Python实现——带你纯纯手工做双线性曲面插值

一、曲面片的双线性插值实例

例1. 已知某曲面的四个角点坐标分别为( 0.1, 0.1 ), ( 0.1, 1.2 ), ( 1.1, 0.1 ), ( 1.1, 1.2 ),利用双线性插值完成该曲面插值,绘制插值插值之后的曲面片。

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure(figsize=(10,8))
ax=plt.gca(projection='3d')
x=np.array([0.1,0.1,1.1,1.1,0.1])
y=np.array([0.1,1.2,0.1,1.2,0.1])
z=np.array([1,0.3,1.9,0.6,1])
figure=ax.plot(x[0:2],y[0:2],z[0:2],c='r')
figure=ax.plot(x[1:3],y[1:3],z[1:3],c='y')
figure=ax.plot(x[2:4],y[2:4],z[2:4],c='b')
figure=ax.plot(x[3:5],y[3:5],z[3:5],c='g')
plt.show()

运行结果如下:

 2)绘制利用曲面片内部插值点生成的网格曲面片

x_=np.arange(0,1.3,0.1)
y_=np.arange(0,1.3,0.1)
X,Y=np.meshgrid(x_,y_)
x1=x[0]
x2=x[2]
y1=y[0]
y2=y[1]
z1=z[0]
z2=z[2]
z3=z[1]
z4=z[3]
x2_1=x2-x1
y2_1=y2-y1
Y_1=Y-y1
X_1=X-x1
Z=(Y_1*X_1*(z1-z2-z3+z4))/(x2_1*y2_1)+(Y_1*(z3-z1))/y2_1+(X_1*(z2-z1))/x2_1+z1

fig=plt.figure(figsize=(10,8))
ax=fig.gca(projection='3d')
ax.plot_surface(X,Y,Z)
ax.view_init(15,-25)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_xlim(-3,3)
ax.set_ylim(-1,1.5)
plt.show()

运行结果:

 3)增加外部插值点之后得到的插值曲面

x_=np.arange(-0.6,1.6,0.1)
y_=np.arange(-0.6,1.6,0.1)
X,Y=np.meshgrid(x_,y_)
x1=x[0]
x2=x[2]
y1=y[0]
y2=y[1]
z1=z[0]
z2=z[2]
z3=z[1]
z4=z[3]
x2_1=x2-x1
y2_1=y2-y1
Y_1=Y-y1
X_1=X-x1
Z=(Y_1*X_1*(z1-z2-z3+z4))/(x2_1*y2_1)+(Y_1*(z3-z1))/y2_1+(X_1*(z2-z1))/x2_1+z1
fig=plt.figure(figsize=(10,8))
ax=fig.gca(projection='3d')
ax.plot_surface(X,Y,Z)
ax.view_init(15,-25)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_xlim(-3,3)
ax.set_ylim(-1,1.5)
plt.show()
plt.show()

 运行结果:

 

大家七夕节快乐呀!!呱呱呱

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值