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