- 552 名前:132人目の素数さん mailto:sage [2024/03/20(水) 16:52:07.76 ID:4EeDFBOy.net]
- >>526
R言語で探索させてみる。 その方法 A(x,y), B(0,0),C(1,0)として 重心G、外心O、内心I、垂心Gの座標を求めるx,yの関数を作成して 三角形GOI および 三角形GHIの面積が最小値になるx,yをNelder-Mead法で探索させる。 outcircle <-function(A,B,C){ # circumscribing circle a=abs(B-C) b=abs(C-A) c=abs(A-B) center=((a^2*(b^2+c^2-a^2)*A + b^2*(c^2+a^2-b^2)*B + c^2*(a^2+b^2-c^2)*C))/(a^2*(b^2+c^2-a^2) + b^2*(c^2+a^2-b^2) + c^2*(a^2+b^2-c^2)) radius=a*b*c/sqrt((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c)) list(center=center,radius=radius) } incircle <-function(P,Q,R){ # inscribing circle p=abs(Q-R) q=abs(R-P) r=abs(P-Q) s=(p+q+r)/2 S=sqrt(s*(s-p)*(s-q)*(s-r)) radius=S/s center=(p*P+q*Q+r*R)/(p+q+r) list(center=center,radius=radius) } Orthocenter <-function(A,B,C,print=FALSE){ a1=Re(A) ; a2=Im(A) b1=Re(B) ; b2=Im(B) c1=Re(C) ; c2=Im(C) O1=(a1*(a2*(b1-c1)-b1*b2+c1*c2)+(b2-c2)*(a2^2-a2*(b2+c2)+b1*c1+b2*c2))/ (a1*(c2-b2)+a2*(b1-c1)-b1*c2+b2*c1) O2=(a1^2*(b1-c1)+a1*(a2*b2-a2*c2-b1^2+c1^2)+a2*(c1*c2-b1*b2)+(b1-c1)*(b1*c1+b2*c2))/(a1*(b2-c2)+a2*(c1-b1)+b1*c2-b2*c1) if(print){ cat( det(matrix(c(-b1*c1-a2^2,-a1*c1-b2^2,-a1*b1-c2^2,a2,b2,c2,1,1,1),3,3))/ det(matrix(c(a1,b1,c1,a2,b2,c2,1,1,1),3,3))+1i*det(matrix(c(a1,b1,c1,-a1^2-b2*c2,-b1^2-a2*c2,-c1^2-a2*b2,1,1,1),3,3))/det(matrix(c(a1,b1,c1,a2,b2,c2,1,1,1),3,3)) ,'\n')} return(O1+1i*O2) } ABC2S <- function(A,B,C) abs(Im((A-C)*Conj(B-C)))/2
|

|