matlab 圆和直线的交点,用matlab求直线和椭圆的交点坐标!
我的2009的,我是過2011的返回的也是和你一樣的
不過這兩種表達式應該是一樣的
我分別代過數值去檢驗,得到的結果是一樣的
但是我找不到辦法用matlab將你得到的表達式轉變成我得到的
不過查了一下資料,用手推算應該可以證明兩者是一樣的
以下是我查到最有用的一段
log函數在實數域中不能對負數和零進行計算,
MATLAB中的log函數則可以接受負數輸入,并將其作為復數進行處理。
而log(0)返回-inf
對于復數元素x+i*y,其自然對數等于log(abs(x+i*y))+i*atan2(y,x)。
也就是說復數x+i*y的自然對數得到的結果是:
實部是原復數的模的自然對數,虛部是原來的幅角
所以用復數域定義的自然對數log,是可以表示atan2的
可能是這樣,所以新版本的matlab對符號運算優化了一下
求角度應該atan2的,但是atan2不能用于符號運算,所以舊版本就無能為力
而新版本用log函數表示,就解決了這個問題
我版本的atan((b*kx + a*ky*tan(t0/2))/(a*ky - b*kx*tan(t0/2)))寫為atan2
atan2(b*kx + a*ky*tan(t0/2) ,a*ky - b*kx*tan(t0/2));
讓b*kx + a*ky*tan(t0/2)=Y,a*ky - b*kx*tan(t0/2)=X,再讓Z=sqrt(X^2+Y^2)
atan2(Y,X)于atan2(Y/Z,X/Z)是一致的,只是將模歸一化了,那么
log((X+Y*i)/Z)= log( (X^2+Y^2)/Z^2)+i*atan2(Y/Z,X/Z)
=log(1)+i*atan2(Y/Z,X/Z)=0+i*atan2(Y/Z,X/Z)=i*atan2(Y,X)
所以atan2(Y,X)=-i*log((X+Y*i)/Z)
也就是atan2可以由模歸一化后的X+Yi的自然對數乘以-i獲得
另一方面可以通過將tan化為cos/sin 而cos和sin函數又可以通過歐拉公式exp函數表示
最終tan(t0/2)可以化為用exp(i*t0)表示
tan(t0/2)=(i - i*exp(i*t0))/(exp(i*t0) + 1)
篇幅有限推導過程就不寫了,最后這兩個結果應該是等價的
考慮到atan沒有像給出atan2那樣正確的結果,
所以新版本給的用log表示的結果應該更不會有問題
總結
以上是生活随笔為你收集整理的matlab 圆和直线的交点,用matlab求直线和椭圆的交点坐标!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2017-2018-1 20155229
- 下一篇: matlab人脸追踪,求大神帮助我这个菜