UVA 11437 - Triangle Fun(计算几何)
2015-03-05 15:28
417 查看
这题只要根据题目,利用向量把点一个个求出来计算面积即可
不过据说有一种证明方法可以证明面积是1/7的原三角形
代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int t;
struct Point {
double x, y;
Point() {}
Point(double x, double y) {
this->x = x;
this->y = y;
}
void read() {
scanf("%lf%lf", &x, &y);
}
};
typedef Point Vector;
Vector operator + (Vector A, Vector B) {
return Vector(A.x + B.x, A.y + B.y);
}
Vector operator - (Vector A, Vector B) {
return Vector(A.x - B.x, A.y - B.y);
}
Vector operator * (Vector A, double p) {
return Vector(A.x * p, A.y * p);
}
Vector operator / (Vector A, double p) {
return Vector(A.x / p, A.y / p);
}
double Cross(Vector A, Vector B) {return A.x * B.y - A.y * B.x;} //叉积
double Area2(Point A, Point B, Point C) {return Cross(B - A, C - A);} //有向面积
Point GetLineIntersection(Point P, Vector v, Point Q, Vector w) {
Vector u = P - Q;
double t = Cross(w, u) / Cross(v, w);
return P + v * t;
}
int main() {
scanf("%d", &t);
while (t--) {
Point A, B, C;
A.read(); B.read(); C.read();
Point D, E, F;
D = (C - B) / 3 + B;
E = (A - C) / 3 + C;
F = (B - A) / 3 + A;
Point R = GetLineIntersection(C, F - C, A, D - A);
Point P = GetLineIntersection(B, E - B, A, D - A);
Point Q = GetLineIntersection(C, F - C, B, E - B);
printf("%d\n", (int)(fabs(Area2(P, Q, R)) / 2 + 0.5));
}
return 0;
}
不过据说有一种证明方法可以证明面积是1/7的原三角形
代码:
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int t;
struct Point {
double x, y;
Point() {}
Point(double x, double y) {
this->x = x;
this->y = y;
}
void read() {
scanf("%lf%lf", &x, &y);
}
};
typedef Point Vector;
Vector operator + (Vector A, Vector B) {
return Vector(A.x + B.x, A.y + B.y);
}
Vector operator - (Vector A, Vector B) {
return Vector(A.x - B.x, A.y - B.y);
}
Vector operator * (Vector A, double p) {
return Vector(A.x * p, A.y * p);
}
Vector operator / (Vector A, double p) {
return Vector(A.x / p, A.y / p);
}
double Cross(Vector A, Vector B) {return A.x * B.y - A.y * B.x;} //叉积
double Area2(Point A, Point B, Point C) {return Cross(B - A, C - A);} //有向面积
Point GetLineIntersection(Point P, Vector v, Point Q, Vector w) {
Vector u = P - Q;
double t = Cross(w, u) / Cross(v, w);
return P + v * t;
}
int main() {
scanf("%d", &t);
while (t--) {
Point A, B, C;
A.read(); B.read(); C.read();
Point D, E, F;
D = (C - B) / 3 + B;
E = (A - C) / 3 + C;
F = (B - A) / 3 + A;
Point R = GetLineIntersection(C, F - C, A, D - A);
Point P = GetLineIntersection(B, E - B, A, D - A);
Point Q = GetLineIntersection(C, F - C, B, E - B);
printf("%d\n", (int)(fabs(Area2(P, Q, R)) / 2 + 0.5));
}
return 0;
}
相关文章推荐
- UVa 11437:Triangle Fun(计算几何综合应用,求直线交点,向量运算,求三角形面积)
- uva 11437 Triangle Fun (简单计算几何)
- UVA - 11437 - Triangle Fun (计算几何~)
- UVA 11437 Triangle Fun 三角形趣题 (二维几何)
- 计算几何专项:UVa 11437
- 简单几何(求交点) UVA 11437 Triangle Fun
- uva 11437 - Triangle Fun(几何)
- UVA 11437 Triangle Fun 几何基础
- uva 11437 Triangle Fun j求三角形的面积(计算几何)
- 【UVA】11437 Triangle Fun(简单几何)
- uva 190(计算几何)
- UVALive 7004(计算几何 判断点与多边形的关系)
- UVA 11524 - InCircle (计算几何)
- uva 12304 2D Geometry 110 in 1! 计算几何
- UVA12304 2D Geometry 110 in 1! 计算几何
- UVALive 4428 Solar Eclipse --计算几何,圆相交
- uva 190 Circle Through Three Points (计算几何) 面向对象的封装
- [UVA]11800-Determine the Shape(计算几何)
- UVA 1342 - That Nice Euler Circuit(计算几何+欧拉定理)
- UVA 11437 || Triangle Fun