/*求垂心(三条垂直平分线的交点) 重心:三条中线的交点(交点坐标为三个点坐标之和/3) */ #include
#include
#include
#include
#include
using namespace std; struct point{ double x,y; } p0,p1,p2,ret; int Test; point orthocenter(point p0,point p1,point p2) { double a1,b1,a2,b2,c1,c2; a1 = p2.x-p1.x; b1=p2.y-p1.y; c1 = 0; a2 = p2.x-p0.x; b2=p2.y-p0.y; c2 = (p1.x-p0.x)*a2+(p1.y-p0.y)*b2; double d = a1 * b2 - a2 * b1; ret.x = p0.x + (c1 * b2 - c2 * b1) / d; ret.y = p0.y + (a1 * c2 - a2 * c1) / d; return ret; } //求外心 void miniCircle(point *p, point& center, double& radius) { double Xmove=p[0].x; double Ymove=p[0].y; p[1].x=p[1].x-p[0].x; p[1].y=p[1].y-p[0].y; p[2].x=p[2].x-p[0].x; p[2].y=p[2].y-p[0].y; p[0].x=0; p[0].y=0; int index; double x1=p[1].x,y1=p[1].y,x2=p[2].x,y2=p[2].y; double m=2.0*(x1*y2-y1*x2); center.x=(x1*x1*y2-x2*x2*y1+y1*y2*(y1-y2))/m; center.y=(x1*x2*(x2-x1)-y1*y1*x2+x1*y2*y2)/m; //radius=distance(center,p[0]); center.x+=Xmove; center.y+=Ymove; } int main() { cin >> Test; for (int ii = 1;ii<=Test;++ii){ cin>>p0.x>>p0.y>>p1.x>>p1.y>>p2.x>>p2.y; ret = orthocenter(p0,p1,p2); printf("%.4lf %.4lf\n",ret.x+1e-8,ret.y+1e-8); } system("pause"); return 0; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209686.html原文链接:https://javaforall.net
