三點定位法原理及實現 藍芽定位

2021-09-11 02:59:55 字數 1911 閱讀 8140

**實現

最近在做藍芽室內定位,藍芽定位用到的乙個非常經典的演算法就是三點定位法

三點定位法,顧名思義首先有三個圓點,同時我們也知道這三個圓的半徑,最終求得三圓的交點,達到定位效果。如圖:

我們的目的是求得o點,利用畢達哥拉斯定理我們可以快速求得o點座標。不過事與願違,現實情況並不總是如人意,而是這樣:

甚至有的情況其中兩個圓或者三個圓完全就不相交,如下圖:

由於這些誤差原因,實際上想要準確的知道使用者當前位置是相當困難的,但是我們可以通過運算得到乙個近似解。為了應付這些情況,我們需從兩個圓入手,先找到兩兩圓之間的中心點,再求三圓的中心點。

除去圓中圓的情況(現實基本上不存在),兩圓關係可分為兩種,相交,不相交。

可知此時兩圓交點a,b,我們的目標點是ab中點c。根據勾股定理我們可知

\quad pq=pc+qc\\ \quad qa^2=qc^2+ac^2\\ \quad pa^2=pc^2+ac^2 \end

⎩⎪⎨⎪⎧​

pq=p

c+qc

qa2=

qc2+

ac2p

a2=p

c2+a

c2​解得:

p c=

pq2+

pa2−

qa22

pqpc=\frac+\frac

pc=2pq

​+2p

qpa2

−qa2

​根據比例關係求得座標:

如圖,我們需要求o點,簡單的做法就是直接根據半徑比例計算

\quad sum=r_p+r_q\\ \quad \\ \quad x=x_p+\frac\\ \quad \\ \quad y=y_p+\frac \end

⎩⎪⎪⎪⎪⎪

⎪⎨⎪⎪

⎪⎪⎪⎪

⎧​su

m=rp

​+rq

​x=x

p​+s

um(x

q​−x

p​)r

p​​y

=yp​

+sum

(yq​

−yp​

)rp​

​​

struct point;}

;//三點定位法

//dis:半徑

//points:圓心

point threepoints

(float

*dis, point *ps)

else}}

//三個圓兩兩求點,最終得到三個點,求其均值

p.x /=3

; p.y /=3

;return p;

}

三點定位的演算法

三點定位,已知a,b,c三個頂點的x,y座標 和三個點都z座標的距離,la,lb,lc 求z點的座標 原理就是圍繞a,b,c 三個點畫圓,三個圓焦點的部分就是所求 但是,由於三個點的距離可能不准,不一定會有結果,所以是三個圓環的焦點,環的寬度開始為0,沒有取到則加1 執行gcc lm test.c ...

三點定位 企業展廳設計怎麼定位,從這三點入手

企業展廳是一項系統工程,涉及環節比較複雜比較多。要在綜合考慮空間面積大小 造型和所處位置等客觀因素上對整個展廳進行設計布局。力求展廳落地呈現出效果最大化。要做到這樣,企業展廳設計怎麼精準定位,重慶數位化展廳設計公司曼斯特科技給大家甩乾貨 從這三點入手。1 突出企業的時代感和特色感 企業展廳是展示企業...

C 學習筆記 三點定位演算法

自己寫的,可能還有很多不足,看著 不對的求提出,我改 先上 然後解釋我的想法 1 namespace threepointorientation210 static point threepointorientation point a,point b,point c,int lenaz,int l...