【数学与算法】曲线上各点的曲率kappa和倾角theta
曲線上每個點的兩個屬性,傾角 θ\color{red}\thetaθ 和曲率kappa\color{red}kappakappa。
1.傾角:
曲線上有兩點A、B\color{red}A、BA、B很近,A\color{red}AA點的切線與前進方向 x\color{red}xx 的角度θ\color{red}\thetaθ,就是A\color{red}AA點的傾角 。
但是,在實際工程中,不容易直接求出曲線每個點的切線和前進方向 x\color{red}xx 的角度,但是由于曲線上的兩點A、B\color{red}A、BA、B很近,可以近似用下圖的 α\color{red}\alphaα 來代替A\color{red}AA點的傾角 θ\color{red}\thetaθ。
就是用兩個點的弦來代替該點的切線,這樣就可以使用 A、B\color{red}A、BA、B 兩點的坐標【(x,y)都已知】來求解下圖的 α\color{red}\alphaα,該 α\color{red}\alphaα 就是A\color{red}AA點的近似傾角。
tanα=ΔyΔx\color{red}tan{\alpha}=\frac{\Delta{y}}{\Delta{x}}tanα=ΔxΔy?,即曲線相鄰兩個點的水平方向距離除以豎直方向距離,就是α\color{red}\alphaα的正切值。
因為使用 α\color{red}\alphaα 來近似 θ\color{red}\thetaθ ,所以代碼中就使用 α\color{red}\alphaα 的值為傾角 θ\color{red}\thetaθ 的值:
tanθ=ΔyΔx\color{red}tan{\theta}=\frac{\Delta{y}}{\Delta{x}}tanθ=ΔxΔy?
2.曲率
曲線的曲率(curvature)就是針對曲線上某個點的切線方向角對弧長的轉動率,通過微分來定義,表明曲線偏離直線的程度。數學上表明曲線在某一點的彎曲程度的數值。
曲率越大,表示曲線的彎曲程度越大。曲率的倒數就是曲率半徑。
如上圖,一段曲線上有兩點A\color{red}AA和B\color{red}BB。
- α\color{red}\alphaα為A\color{red}AA、B\color{red}BB兩個點的切線的轉角,圖中構成夾角α\color{red}\alphaα分別為兩個點切線;
- β1\color{red}\beta_{1}β1?為A\color{red}AA點切線與x\color{red}xx方向的夾角;
- β2\color{red}\beta_{2}β2?為B\color{red}BB點切線與x\color{red}xx方向的夾角;
- O\color{red}OO為曲率圓的中心;
在離散曲線的每個點的切線與x\color{red}xx方向的夾角β\color{red}\betaβ都是已知的,
那么對于曲線上每一個點,它相對于上一個點的切線轉動角α\color{red}\alphaα,都可以通過α=β2?β1\color{red}\alpha=\beta_{2}-\beta_{1}α=β2??β1?,求解得到。
并且,可以知道,α=∠AOB\color{red}\alpha=\angle{AOB}α=∠AOB,即兩點切線的轉角等于曲率圓的兩點和圓心構成角度。
由于曲線上A\color{red}AA、B\color{red}BB 兩點很近,可把弧AB\color{red}{AB}AB近似等于弦長AB\color{red}{AB}AB,那么
根據曲率公式可得到每一個點的曲率為:
k=αAB\color{red}k=\frac{\alpha}{AB}k=ABα?
因為,弧長公式: s=α?R\color{red}s=\alpha*Rs=α?R,得到:1R=αs\color{red}\frac{1}{R}=\frac{\alpha}{s}R1?=sα?,所以也可以簡單理解為,曲率就是半徑的倒數: k=1R\color{red}k=\frac{1}{R}k=R1?。
每一點的曲率kappa需要用到上一個點的傾角與該點自己的傾角,當曲線每個點的xy坐標知曉時,每個點的曲率都可以求解出來。
最后一個點的傾角不能求,就不用求,過濾掉該點。
3.求曲線上的每個點的曲率的步驟:
假設曲線共有n個點,分為兩個大步驟:
1.先求曲線上每個點的傾角 θ\color{red}\thetaθ:
- 求曲線第0個點傾角 θ\color{red}\thetaθ,它由第0個點坐標(x0,y0)\color{red}(x_0,y_0)(x0?,y0?)和第1個點的坐標(x1,y1)\color{red}(x_1,y_1)(x1?,y1?)根據 tanθ=ΔyΔx=y1?y0x1?x0\color{red}tan{\theta}=\frac{\Delta{y}}{\Delta{x}}=\frac{y_1-y_0}{x_1-x_0}tanθ=ΔxΔy?=x1??x0?y1??y0??近似得到;
- 求曲線第1個點傾角 θ\color{red}\thetaθ,它由第1個點和第2個點的坐標根據 tanθ=ΔyΔx\color{red}tan{\theta}=\frac{\Delta{y}}{\Delta{x}}tanθ=ΔxΔy?近似得到;
- …
- 求曲線第n-1個點傾角 θ\color{red}\thetaθ(他是求不出來的),它由第n-1個點和第n個點的坐標根據 tanθ=ΔyΔx\color{red}tan{\theta}=\frac{\Delta{y}}{\Delta{x}}tanθ=ΔxΔy?近似得到,但是不存在第n個點,所以該點的傾角求不了,就不用求;
2.然后再求曲率kappa:
- 求曲線第1個點的曲率k1\color{red}k_1k1?:注意,不是第0個點的kappa(因為第0個點的kappa求不了),第一個點的切線轉動角α\color{red}\alphaα 由第0個點的傾角θ0\color{red}\theta_0θ0?和第1個點的傾角θ1\color{red}\theta_1θ1?根據 α=θ1?θ0\color{red}\alpha=\theta_1-\theta_0α=θ1??θ0?近似得到,然后再使用k=αAB\color{red}k=\frac{\alpha}{AB}k=ABα?得出第一個點點的曲率 k1\color{red}k_1k1?;
- 求曲線第2個點的曲率k2\color{red}k_2k2?:…
- …
- 求曲線第n-2個點的曲率k2\color{red}k_2k2?:…
百度百科:曲率
離散點(離散序列)曲率計算那點事
總結
以上是生活随笔為你收集整理的【数学与算法】曲线上各点的曲率kappa和倾角theta的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【opencv】YUV各种色彩、YUV4
- 下一篇: 【数学与算法】贝塞尔曲线