问题描述
“两只小蜜蜂呀,飞在花丛中呀……”
话说这天天上飞舞着两只蜜蜂,它们在跳一种奇怪的舞蹈。用一个空间直角坐标系来描述这个世界,那么这两只蜜蜂初始坐标分别为(x1,y1,z1),(x2,y2,z2) 。在接下来它们将进行n次飞行,第i次飞行两只蜜蜂分别按照各自的速度向量飞行ti个单位时间。对于这一现象,玮玮已经观察了很久。他很想知道在蜜蜂飞舞结束时,两只蜜蜂的距离是多少。现在他就求教于你,请你写一个程序来帮他计算这个结果。
话说这天天上飞舞着两只蜜蜂,它们在跳一种奇怪的舞蹈。用一个空间直角坐标系来描述这个世界,那么这两只蜜蜂初始坐标分别为(x1,y1,z1),(x2,y2,z2) 。在接下来它们将进行n次飞行,第i次飞行两只蜜蜂分别按照各自的速度向量飞行ti个单位时间。对于这一现象,玮玮已经观察了很久。他很想知道在蜜蜂飞舞结束时,两只蜜蜂的距离是多少。现在他就求教于你,请你写一个程序来帮他计算这个结果。
输入格式
第一行有且仅有一个整数n,表示两只蜜蜂将进行n次飞行。
接下来有n行。
第i行有7个用空格分隔开的整数ai,bi,ci,di,ei,fi,ti ,表示第一只蜜蜂单位时间的速度向量为(ai,bi,ci) ,第二只蜜蜂单位时间的速度向量为(di,ei,fi) ,它们飞行的时间为ti 。
最后一行有6个用空格分隔开的整数x1,y1,z1,x2,y2,z2,如题所示表示两只蜜蜂的初始坐标。
接下来有n行。
第i行有7个用空格分隔开的整数ai,bi,ci,di,ei,fi,ti ,表示第一只蜜蜂单位时间的速度向量为(ai,bi,ci) ,第二只蜜蜂单位时间的速度向量为(di,ei,fi) ,它们飞行的时间为ti 。
最后一行有6个用空格分隔开的整数x1,y1,z1,x2,y2,z2,如题所示表示两只蜜蜂的初始坐标。
输出格式
输出仅包含一行,表示最后两只蜜蜂之间的距离。保留4位小数位。
样例输入
Sample 1
1
1 1 1 1 -1 1 2
3 0 1 2 0 0
Sample 2
3
1 1 1 1 -1 1 2
2 1 2 0 -1 -1 2
2 0 0 -1 1 1 3
3 0 1 2 0 0
样例输出
Sample 1 4.2426 Sample 2 15.3948
#include<iostream>
#include"math.h"
#include "vector"
#include "iomanip"
using namespace std;
int main()
{
int n;
cin>>n;
// 保存飞行后的坐标
double bx1=0,by1=0,bz1=0;
double bx2=0,by2=0,bz2=0;
for (int i = 0; i < n; ++i) {
// 输入向量的值
double a1,a2,a3;
cin>>a1>>a2>>a3;
double b1,b2,b3;
cin>>b1>>b2>>b3;
// 输入飞行的距离
double t;
cin>>t;
// 得到飞行t秒后的坐标
bx1+=a1*t;
by1+=a2*t;
bz1+=a3*t;
bx2+=b1*t;
by2+=b2*t;
bz2+=b3*t;
}
// 加上起始坐标
double a1,a2,a3;
cin>>a1>>a2>>a3;
double b1,b2,b3;
cin>>b1>>b2>>b3;
bx1+=a1;
by1+=a2;
bz1+=a3;
bx2+=b1;
by2+=b2;
bz2+=b3;
// 得到两只蜜蜂的距离
double d=sqrt((bx1-bx2)*(bx1-bx2)+(by1-by2)*(by1-by2)+(bz1-bz2)*(bz1-bz2));
cout<<fixed<<setprecision(4)<<d<<endl;
return 0;
}