#include <iostream>
#include<iomanip>
#include <cmath>
using namespace std;
int main(){
int t;
cin>>t;
double weizhi[t][4];
for(int i=0;i<t;i++){
cin>>weizhi[i][0]>>weizhi[i][1]>>weizhi[i][2]>>weizhi[i][3];
}
double x31,y31,x32,y32,delta,L,a,b,bb,c;
for(int i=0;i<t;i++){
if(weizhi[i][0]==weizhi[i][2]){
y31=(weizhi[i][1]+weizhi[i][3])/2;
y32=y31;
L=abs(weizhi[i][1]-weizhi[i][3]);//边长
delta=sqrt(3.0)/2*L;//等边三角形中位线长度√3x/2
x31=weizhi[i][0]-delta;
x32=weizhi[i][0]+delta;
}
else if(weizhi[i][1]==weizhi[i][3]){
x31=(weizhi[i][0]+weizhi[i][2])/2;
x32=x31;
L=abs(weizhi[i][0]-weizhi[i][2]);
delta=sqrt(3.0)/2*L;
y31=weizhi[i][1]-delta;
y32=weizhi[i][1]+delta;
}
else{
a=-(weizhi[i][2]-weizhi[i][0])/(weizhi[i][3]-weizhi[i][1]);
b=(weizhi[i][1]+weizhi[i][3])/2+(weizhi[i][0]+weizhi[i][2])*(weizhi[i][2]-weizhi[i][0])/(2*(weizhi[i][3]-weizhi[i][1]));
bb=2*(a*b-a*weizhi[i][1]-weizhi[i][0]);
c=weizhi[i][0]*weizhi[i][0]+(b-weizhi[i][1])*(b-weizhi[i][1])-(weizhi[i][0]-weizhi[i][2])*(weizhi[i][0]-weizhi[i][2])-(weizhi[i][1]-weizhi[i][3])*(weizhi[i][1]-weizhi[i][3]);
delta=sqrt(bb*bb-4*(1+a*a)*c);
x31=(-bb-delta)/(2*(1+a*a));
x32=(-bb+delta)/(2*(1+a*a));
y31=a*x31+b;
y32=a*x32+b;
}
cout.setf(ios::fixed);
cout<<setprecision(2);
cout<<x31<<" "<<y31<<" "<<x32<<" "<<y32<<endl;
}
return 0;
}
百度-正三角形的顶点位置-c++
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 逆向block是一个稍微难点的活,因为你并不知道需要传什么样的参数,也不知道是什么类型的返回。另外,Swift的b...