定比分点
向量形式
A
D
⃗
=
C
D
⃗
B
C
⃗
A
B
⃗
+
B
D
⃗
B
C
⃗
A
C
⃗
\vec{AD}=\frac{\vec{CD}}{\vec{BC}}\vec{AB}+\frac{\vec{BD}}{\vec{BC}}\vec{AC}
AD=BCCDAB+BCBDAC
设
B
D
⃗
=
λ
D
C
⃗
\vec{BD}=\lambda\vec{DC}
BD=λDC,则:
A
D
⃗
=
A
B
⃗
+
λ
A
C
⃗
1
+
λ
\vec{AD}=\frac{\vec{AB}+\lambda\vec{AC}}{1+\lambda}
AD=1+λAB+λAC
坐标形式
已知两点
A
(
x
1
,
y
1
)
A(x_1,y_1)
A(x1,y1),
B
(
x
2
,
y
2
)
B(x_2,y_2)
B(x2,y2),在两点连线上有一点
P
P
P,设它的坐标为
(
x
,
y
)
(x,y)
(x,y),且
A
P
⃗
:
P
B
⃗
=
λ
\vec{AP}:\vec{PB}=\lambda
AP:PB=λ,则
x
=
x
1
+
λ
x
2
1
+
λ
x=\frac{x_1+\lambda x_2}{1+\lambda}
x=1+λx1+λx2
y
=
y
1
+
λ
y
2
1
+
λ
y=\frac{y_1+\lambda y_2}{1+\lambda}
y=1+λy1+λy2
Pick定理
参考资料:https://blog.csdn.net/linxilinxilinxi/article/details/82624098#11__822
Pick定理是指一个计算点阵中顶点在格点上的多边形面积公式该公式可以表示为:
2
S
=
2
a
+
b
−
2
2S=2a+b-2
2S=2a+b−2
其中 a a a表示多边形内部的点数, b b b表示多边形边界上的点数, S S S表示多边形的面积。
struct Point{
int x, y;
};
//多边形上的网格点个数
int Onedge(int n, Point* p){
int ret = 0;
for(int i = 0; i < n; ++i)
ret += __gcd(abs(p[i].x - p[(i + 1)%n].x), abs(p[i].y - p[(i + 1)%n].y));
return ret;
}
//多边形内的网格点个数
int Inside(int n, Point* p){
int ret = 0;
for (int i = 0; i < n; ++i)
ret += p[(i + 1)%n].y*(p[i].x - p[(i + 2)%n].x);
ret = (abs(ret) - Onedge(n, p))/2 + 1;
return ret;
}