p:=centres([[4, 0], [-2, 4], [0, 6]], "o")
msgbox % "Orthocentres - `n x=" p.1 "`n y=" p.2
return

; https://www.autohotkey.com/boards/viewtopic.php?f=6&t=1181
;-------------------- Function ----------------------
; r := i = incentres
; m = centroid
; c = circumcentre
; o = orthocentre
; leave r blank to return eqn of euler line

centres(z, r:=""){
  mx := (z.1.1+z.2.1+z.3.1)/3 , my := (z.1.2+z.2.2+z.3.2)/3 	;medians done
  s := ( c := sqrt( (z.2.1 - z.1.1)**2 + (z.2.2-z.1.2)**2 ) ) + ( a := sqrt( (z.3.1-z.2.1)**2 + (z.3.2-z.2.2)**2 ) )
    + ( b := sqrt( (z.3.1-z.1.1)**2 + (z.3.2-z.1.2)**2 ) )
  ix := (a*z.1.1+b*z.2.1+c*z.3.1)/s , iy := (a*z.1.2+b*z.2.2+c*z.3.2)/s 	; incentres done
  midx_a := (z.3.1+z.2.1)/2 , midy_a := (z.3.2+z.2.2)/2 , slp_a := -1*(z.3.1-z.2.1)/(z.3.2-z.2.2) 	;perpendicular slope
  cc_a := midy_a-(slp_a*midx_a)  		; b = y - mx
  midx_b := (z.3.1+z.1.1)/2 , midy_b := (z.3.2+z.1.2)/2 , slp_b := -1*(z.3.1-z.1.1)/(z.3.2-z.1.2)
  cc_b := midy_b-(slp_b*midx_b) 		; b = y - mx
  cx := (cc_b-cc_a)/(slp_a-slp_b) , cy := cc_a + (slp_a*cx) 	; y := b+mx --- circumcentres done
  oc_a := z.1.2-(slp_a*z.1.1) 	; b = y - mx
  oc_b := z.2.2-(slp_b*z.2.1)
  ox := (oc_a-oc_b)/(slp_b-slp_a) , oy := oc_a + (slp_a*ox) 	; orthocentres done
  if r in m,i,c,o
    return [Round(%r%x), Round(%r%y)]
  else return "y=" Round(m:=(oy-cy)/(ox-cx)) "x+" Round(oy-m*ox)
}

 

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。