#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include<string>
using namespace std;
void main()
{
int n;
while (cin >> n)
{
while (n--)
{
int x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
double dis=0.0;
if (x1+y1 > x2+y2)
{
int temp = x1;
x1 = x2;
x2 = temp;
temp = y1; y1 = y2; y2 = temp;
}
//不在一条直线
if ((x1 + y1) != (x2 + y2))
{
//
dis += sqrt(2 * y1*y1);
dis -= sqrt(2 * y2*y2);
for (int i = 1; i <= x2 + y2-x1-y1; i++)
{
dis += (x1+y1+i)*sqrt(2.0);
}
for (int i = 0; i < x2 + y2 - x1 - y1; i++)
{
dis += sqrt((x1 + y1 + i) * (x1 + y1+ i) + (x1+y1 + i+1)*(x1 + y1 + i+1));
}
}
else
dis = len(x1, y1, x2, y2);
cout.precision(3);
cout << fixed << dis << endl;
}
}
}
本文介绍了一个计算二维平面上由顶点构成的特定路径长度的算法。该算法首先判断顶点是否位于同一斜线上,并据此采用不同的计算方法。对于不位于同一直线上的顶点,通过迭代计算每一步路径的精确长度来累加总距离。

520

被折叠的 条评论
为什么被折叠?



