悬赏100!用matlab求直线和椭圆的交点坐标!
>>symsabt0tkxky>>%已知椭圆上的一点(a*cos(t0),b*sin(t0)),过该点的矢量的方向为(kx,ky),求该向量与椭圆的另一个交点坐标(a*c...
>> syms a b t0 t kx ky
>> %已知椭圆上的一点(a*cos(t0),b*sin(t0)),过该点的矢量的方向为(kx,ky),求该向量与椭圆的另一个交点坐标(a*cos(t),b*sin(t)),即求出旋转角t;
>> %t必须是符号表达式(解析式)
>> %显然t与t0,a,b,kx,ky有关(t的定义见图示) 展开
>> %已知椭圆上的一点(a*cos(t0),b*sin(t0)),过该点的矢量的方向为(kx,ky),求该向量与椭圆的另一个交点坐标(a*cos(t),b*sin(t)),即求出旋转角t;
>> %t必须是符号表达式(解析式)
>> %显然t与t0,a,b,kx,ky有关(t的定义见图示) 展开
展开全部
syms a b t0 t kx ky
x0=a*cos(t0);
y0=b*sin(t0);
x=a*cos(t);
y=b*sin(t);
t=solve((x-x0)*ky-(y-y0)*kx,t)
t =
t0 + 2*pi*k
2*pi*k - 2*atan((b*kx + a*ky*tan(t0/2))/(a*ky - b*kx*tan(t0/2)))
显然第一个点就是原来的t0点
因为以2pi为周期的t都符合条件,所以结果会有2*pi*k的附加项
加两句
t=subs(t,'k',0);
t=t(t~=t0)
t =
(-2)*atan((b*kx + a*ky*tan(t0/2))/(a*ky - b*kx*tan(t0/2)))
x0=a*cos(t0);
y0=b*sin(t0);
x=a*cos(t);
y=b*sin(t);
t=solve((x-x0)*ky-(y-y0)*kx,t)
t =
t0 + 2*pi*k
2*pi*k - 2*atan((b*kx + a*ky*tan(t0/2))/(a*ky - b*kx*tan(t0/2)))
显然第一个点就是原来的t0点
因为以2pi为周期的t都符合条件,所以结果会有2*pi*k的附加项
加两句
t=subs(t,'k',0);
t=t(t~=t0)
t =
(-2)*atan((b*kx + a*ky*tan(t0/2))/(a*ky - b*kx*tan(t0/2)))
更多追问追答
追问
我见你的结果用来atan函数,这个函数存在问题吧?
因为反正切得到的角度位于(-pi/2,pi/2),所以第二和第三象限的t值会错以为是第一和第四象限的。。。
能不能有一种解析式,让确定的t0,a,b,kx,ky对应一个唯一的t值呢?
追答
结果前面有个-2*
就将-pi/2~pi/2变成-pi~pi
你可以代几个数进去看看结果对不对
的确atan和atan2是不同的,
atan2根据y和x的正负判断角的象限
但是符号运算是不能判断大小的,正负的,所以符号运算中不能用atan2
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询