根据两点以及短半轴长度画半椭圆
基本思路:两个点所连线段的长度的一半为长半轴长度,首先以原点为中心画出椭圆,然后根据两点连线确定旋转的正余弦值,得到旋转矩阵,然后对椭圆进行旋转,根据两点线段的中点,平移图形,即可得到旋转后的半椭圆图。
源代码如下:
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()
结果