美文网首页
百度-正三角形的顶点位置-c++

百度-正三角形的顶点位置-c++

作者: Jacinth | 来源:发表于2017-09-27 21:12 被阅读0次

#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++

      本文链接:https://www.haomeiwen.com/subject/eurpextx.html