根据两点画半椭圆的方法

根据两点以及短半轴长度画半椭圆

基本思路:两个点所连线段的长度的一半为长半轴长度,首先以原点为中心画出椭圆,然后根据两点连线确定旋转的正余弦值,得到旋转矩阵,然后对椭圆进行旋转,根据两点线段的中点,平移图形,即可得到旋转后的半椭圆图。

源代码如下:

import numpy as np
import matplotlib.pylab as plt

def drawArc(point1, point2,b):
    a = np.sqrt((point1[0]-point2[0])*(point1[0]-point2[0])+(point1[1]-point2[1])*(point1[1]-point2[1]))/2
    x = np.linspace(-a, a, 100)
    y = -np.sqrt(b*b-b*b*x*x/a/a)
    return (x,y,a)
point1=[10,20]
point2=[30,60]
b=10
plt.scatter([point1[0],point2[0]],[point1[1],point2[1]],c='black')
x,y,a=drawArc(point1,point2,b)
#旋转角度为 alpha
#旋转矩阵为[[cos(alpha),sin(alpha)],[-sin(alpha),cos(alpha)]]
#则此时的旋转矩阵为
A=[[-(point2[0]-point1[0])/(2*a),(point2[1]-point1[1])/(2*a)],[-(point2[1]-point1[1])/(2*a),-(point2[0]-point1[0])/(2*a)]]
B=[x,y]
C=np.dot(A,B)
plt.plot(C[0]+(point1[0]+point2[0])/2,C[1]+(point1[1]+point2[1])/2,c='black')
ax=plt.gca()
ax.set_aspect(1)
plt.savefig('demo1.eps',dpi=300,format='eps')
plt.show()

结果

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值