3,881
社区成员
发帖
与我相关
我的任务
分享
#include <math.h> // fabs, sin, cos, atan, atan2
#include <stdio.h> // printf
struct Pt {double x; double y;};
void f(double a1, double a2, Pt p1, Pt p2)
{
double Ag = atan2((p2.y - p1.y) , (p2.x - p1.x));
double arr_A1[2] = { Ag - a1, Ag + a1};
double arr_A2[2] = { Ag + a2, Ag - a2};
int i;
double A1, A2, kA1, kB1, kC1, kA2, kB2, kC2, rho1, rho2, x_left, x_right, y_left, y_right;
for (i = 0; i != 2; ++i)
{
A1 = arr_A1[i];
A2 = arr_A2[i];
kA1 = cos(A1);
kB1 = -cos(A2);
kC1 = p2.x - p1.x;
kA2 = sin(A1);
kB2 = -sin(A2);
kC2 = p2.y - p1.y;
rho1 = (kB1 * kC2 - kB2 * kC1) / (kB1 * kA2 - kB2 * kA1);
rho2 = (kA1 * kC2 - kA2 * kC1) / (kA1 * kB2 - kA2 * kB1);
x_left = rho1 * cos(A1) + p1.x;
x_right = rho2 * cos(A2) + p2.x;
y_left = rho1 * sin(A1) + p1.y;
y_right = rho2 * sin(A2) + p2.y;
if (fabs(x_left - x_right) < 1e-2
&& fabs(y_left - y_right) < 1e-2)
printf("P3(%.2lf,%.2lf)\n", x_left, y_left);
}
}
int main()
{
Pt p1 = {4, 1}, p2 = {2, 5};
f(atan(1), atan(1), p1, p2); // 测试用的是一个斜着的等腰直角三角形
return 0;
}