Method: TelemetryProcessor.get_roll
- Defined in:
- lib/kamelopard/helpers.rb
.get_roll(p) ⇒ Object
296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 |
# File 'lib/kamelopard/helpers.rb', line 296 def TelemetryProcessor.get_roll(p) x1, y1, x2, y2, x3, y3 = [ p[0][0], p[0][1], p[1][0], p[1][1], p[2][0], p[2][1] ] return 0 if x1.nil? or x2.nil? # Measure roll based on angle between P1 -> P2 and P2 -> P3. To be really # exact I ought to take into account altitude as well, but ... I don't want # to # Set x2, y2 as the origin xn1 = x1 - x2 xn3 = x3 - x2 yn1 = y1 - y2 yn3 = y3 - y2 # Use dot product to get the angle between the two segments angle = Math.acos( ((xn1 * xn3) + (yn1 * yn3)) / (get_dist2(0, 0, xn1, yn1).abs * get_dist2(0, 0, xn3, yn3).abs) ) * 180 / Pi @@options[:exaggerate] * (angle - 180) end |