简单几何计算题
1.三角形面积
2.三角形内部点
所以三角形内部点个数n = s - m / 2 + 1
边点个数
设两点坐标为(x1,y1)和(x2,y2),则由该两点构成的线段上的点的个数n = gcd(abs(x2-x1),abs(y2-y1)),gcd求最大公约数
ac代码
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
#define ll long long
ll x, x2, x3;
ll y, y2, y3;
ll gcd(ll a, ll b) {
return b ? gcd(b, a % b) : a;
}
double triangleArea() {
return 0.5 * abs(x * y2 + x2 * y3 + x3 * y - x * y3 - x2 * y - x3 * y2);
}
ll point_count(ll a1, ll b1, ll a2, ll b2) {
return gcd(abs(a1 - a2), abs(b1 - b2)) - 1;
}
int main() {
while (cin >> x >> y >> x2 >> y2 >> x3 >> y3 && x != -1) {
double ans_area = triangleArea();
ll p1 = point_count(x, y, x2, y2);
ll p2 = point_count(x2, y2, x3, y3);
ll p3 = point_count(x, y, x3, y3);
ll m = p1 + p2 + p3 + 3;
ll p = ans_area - m / 2 + 1;
printf("%.1lf %lld %lld %lld %lld", ans_area, p, p1, p2, p3);
}
return 0;
}
//不用y1是因为y1在math.h中已经定义过。