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