给定一三角形面积S,三点坐标未知,如何去求这三点,并输出,确保不超时,使用c++实现
时间: 2024-05-11 14:17:24 浏览: 134
C++求三角形面积
5星 · 资源好评率100%
要求给定三角形面积S,求三个点的坐标,可以使用向量法来解决。
我们可以假设三个点分别为A(x1,y1), B(x2,y2), C(x3,y3),则三个向量分别为:
AB = (x2-x1, y2-y1)
AC = (x3-x1, y3-y1)
那么根据向量的叉积公式,我们有:
S = 1/2 * |AB × AC| = 1/2 * |(x2-x1)*(y3-y1) - (x3-x1)*(y2-y1)|
由此可以解出一个未知数,比如我们可以假设x1和y1均为0,那么就有:
S = 1/2 * |x2*y3 - x3*y2|
根据这个式子,我们可以解出x2和y2的值,然后再根据向量AB的长度和方向,可以解出B点的坐标。同样的方法可以求出C点的坐标。
下面是C语言实现的代码,时间复杂度为O(1):
```c
#include <stdio.h>
#include <math.h>
void solve(double S) {
double x2, y2, x3, y3;
scanf("%lf%lf", &x2, &y2);
scanf("%lf", &x3);
y3 = 2.0*S / x3 / (x2*y3 - x3*y2);
x3 = sqrt(x3*x3 + y3*y3);
double cosB = (x2*x2 + y2*y2 - x3*x3 - y3*y3) / (2*x2*sqrt(x2*x2 + y2*y2));
double sinB = sqrt(1 - cosB*cosB);
double x1 = x2*cosB - y2*sinB;
double y1 = x2*sinB + y2*cosB;
printf("%lf %lf\n%lf %lf\n%lf %lf\n", x1, y1, x2, y2, x3, y3);
}
int main() {
double S;
scanf("%lf", &S);
solve(S);
return 0;
}
```
这段代码中,我们先读入S的值,然后调用solve函数求解三个点的坐标,并输出结果。在solve函数中,首先读入B点的坐标,然后根据上述公式求解出C点的坐标。最后,我们根据向量AB的长度和方向,求解出A点的坐标,并将三个点坐标输出即可。
阅读全文