简单几何计算题

1.三角形面积

alt

2.三角形内部点

alt 所以三角形内部点个数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中已经定义过。