majer 发表于 2023-1-26 10:03:44

怎么证3点共线



已知A、B两点,以及从A点发出的两条射线(黑)。

现过B点任意作三条红线,交黑线于C、D、E、F、G、H。

连接DH、EG(橙线)交于M,EG并与CH交于N。

连接并延长FM(紫线),交上黑线于P。

连接PG、FN(蓝线),交于Q。

求证:A、B、Q共线。

我知道笛沙格定理,但好像没法直接用……

mathe 发表于 2023-1-26 10:30:51

这个题目做一个射影变换,将直线AB变换为无穷远点,那么就变成如下图:

已知:CD//GF,CH//DG//EF
求证: PG//FN.
这个证明很简单,因为MP/MF=MD/MH=MG/MN
所以PG//FN.

对应原图,设MPF, MDH, MGN分别交直线AB于P',D',G'
于是得到交比A(M,P,F,P')=A(M,D,H,D')=B(M,D,H,D')=B(M,G,N,G')
所以O(M,P,F,P')=O(M,G,N,G'), 得到O P' G'三点共线。

mathe 发表于 2023-1-26 22:06:59

使用笛沙格定理,可以查看三点形BNG和AFP
它们对应边BN和AF交于H, NG和FP交于M, BG和AP交于D点
而点H,M,D三点在一条直线上,所以两个三点形对应点连线AB,NF,GP共点Q

majer 发表于 2023-1-27 12:44:33

mathe 发表于 2023-1-26 22:06
使用笛沙格定理,可以查看三点形BNG和AFP
它们对应边BN和AF交于H, NG和FP交于M, BG和AP交于D点
而点H,M,D ...

赞:b:

dlsh 发表于 2023-2-4 22:05:59

MMA程序暴力证明
(*s,t,u,v,w分别是AC、AF、CB、DB和EB的复斜率*)

\!\(\*OverscriptBox["a", "_"]\) = a = 1;
\!\(\*OverscriptBox["b", "_"]\) = b = 0;
KAB := (a - b)/(
\!\(\*OverscriptBox["a", "_"]\) -
\!\(\*OverscriptBox["b", "_"]\));
\!\(\*OverscriptBox["KAB", "_"]\) := 1/KAB;(*复斜率定义*)
FourPoint := ((
\!\(\*OverscriptBox["c", "_"]\) d - c
\!\(\*OverscriptBox["d", "_"]\)) (a - b) - (
\!\(\*OverscriptBox["a", "_"]\) b - a
\!\(\*OverscriptBox["b", "_"]\)) (c - d))/((a - b) (
\!\(\*OverscriptBox["c", "_"]\) -
\!\(\*OverscriptBox["d", "_"]\)) - (
\!\(\*OverscriptBox["a", "_"]\) -
\!\(\*OverscriptBox["b", "_"]\)) (c - d));(*过两点A和B、C和D的交点*)

\!\(\*OverscriptBox["FourPoint", "_"]\) := -(((c
\!\(\*OverscriptBox["d", "_"]\) -
\!\(\*OverscriptBox["c", "_"]\) d) (
\!\(\*OverscriptBox["a", "_"]\) -
\!\(\*OverscriptBox["b", "_"]\)) - ( a
\!\(\*OverscriptBox["b", "_"]\) -
\!\(\*OverscriptBox["a", "_"]\) b) (
\!\(\*OverscriptBox["c", "_"]\) -
\!\(\*OverscriptBox["d", "_"]\)))/((a - b) (
\!\(\*OverscriptBox["c", "_"]\) -
\!\(\*OverscriptBox["d", "_"]\)) - (
\!\(\*OverscriptBox["a", "_"]\) -
\!\(\*OverscriptBox["b", "_"]\)) (c - d)));

\!\(\*OverscriptBox["Jd", "_"]\) := -((a1 - k1
\!\(\*OverscriptBox["a1", "_"]\) - (a2 - k2
\!\(\*OverscriptBox["a2", "_"]\)))/(
k1 - k2));(*复斜率等于k1,过点A1与复斜率等于k2,过点A2的直线交点*)
Jd := -((k2 (a1 - k1
\!\(\*OverscriptBox["a1", "_"]\)) - k1 (a2 - k2
\!\(\*OverscriptBox["a2", "_"]\)))/(k1 - k2));
c = Jd;
\!\(\*OverscriptBox["c", "_"]\) =
\!\(\*OverscriptBox["Jd", "_"]\); d = Jd;
\!\(\*OverscriptBox["d", "_"]\) =
\!\(\*OverscriptBox["Jd", "_"]\); e = Jd;
\!\(\*OverscriptBox["e", "_"]\) =
\!\(\*OverscriptBox["Jd", "_"]\);
h = Jd;
\!\(\*OverscriptBox["h", "_"]\) =
\!\(\*OverscriptBox["Jd", "_"]\); g = Jd;
\!\(\*OverscriptBox["g", "_"]\) =
\!\(\*OverscriptBox["Jd", "_"]\); f = Jd;
\!\(\*OverscriptBox["f", "_"]\) =
\!\(\*OverscriptBox["Jd", "_"]\);
m = FourPoint;
\!\(\*OverscriptBox["m", "_"]\) =
\!\(\*OverscriptBox["FourPoint", "_"]\); n =
FourPoint;
\!\(\*OverscriptBox["n", "_"]\) =
\!\(\*OverscriptBox["FourPoint", "_"]\);
p = FourPoint;
\!\(\*OverscriptBox["p", "_"]\) =
\!\(\*OverscriptBox["FourPoint", "_"]\);
q = FourPoint;
\!\(\*OverscriptBox["q", "_"]\) =
\!\(\*OverscriptBox["FourPoint", "_"]\);
Simplify[{1, c, d, e}]
Simplify[{2, h, g, f}]
Simplify[{3, m, n}]
Simplify[{4, q,
\!\(\*OverscriptBox["q", "_"]\)}]
Factor[{4, q,
\!\(\*OverscriptBox["q", "_"]\)}]


TSC999 发表于 2023-2-6 11:46:48

本帖最后由 TSC999 于 2023-2-6 12:32 编辑

把 5# 楼的 mathematica 程序用图片显示如下,以便没有安装 mathematica 的友友阅读。
下面图片中的程序对 5# 的程序稍有修改,为的是更容易理解。


程序清单

程序运行结果:

TSC999 发表于 2023-2-6 12:05:49

本帖最后由 TSC999 于 2023-2-6 12:27 编辑

5# 楼的 dlsh 先生对复平面上直线的【复斜率】概念在平面解析几何中的应用进行了多年研究,推导出了两条直线的交点公式,两条直线间的夹角公式……。对于楼主这个多条直线相交的问题,除纯几何方法外,我认为用 dlsh 的解析方法做是最简单易懂的。因为这个方法不需要多少费脑子的思考,只须按步就班套公式求出各点的复坐标表达式即可。最终判断 A、B、Q 是否共线,只须用软件计算通过 B 点的直线 AB 和 BQ 的复斜率是否一样就行了。

下面是 6#楼的程序代码,安装有 mathematica 的友友可以点击复制。

Clear["Global`*"];
\!\(\*OverscriptBox[\(a\), \(_\)]\) = a = 0;\!\(\*OverscriptBox[\(b\), \(_\)]\) = b = 1; (* 令 s、t 分别是 AX、AY 的复斜率。u、v、w 分别是 CB、DB、EB 的复斜率。*)
(* 调用以下自定义函数求 C、D、E、F、G、H 点的坐标:*)
k := (a - b)/(\!\(\*OverscriptBox[\(a\), \(_\)]\) - \!\(\*OverscriptBox[\(b\), \(_\)]\));(*复斜率定义*)
Jd := -((k2 (a1 - k1 \!\(\*OverscriptBox[\(a1\), \(_\)]\)) - k1 (a2 - k2 \!\(\*OverscriptBox[\(a2\), \(_\)]\)))/(k1 - k2));
\!\(\*OverscriptBox[\(Jd\), \(_\)]\) := -((a1 - k1 \!\(\*OverscriptBox[\(a1\), \(_\)]\) - (a2 - k2 \!\(\*OverscriptBox[\(a2\), \(_\)]\)))/(k1 - k2));
(*复斜率等于k1且经过A1点的直线,与复斜率等于k2且经过A2点的直线,两直线的交点*)
c = Jd; \!\(\*OverscriptBox[\(c\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\);
d = Jd; \!\(\*OverscriptBox[\(d\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\);
e = Jd; \!\(\*OverscriptBox[\(e\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\);
h = Jd; \!\(\*OverscriptBox[\(h\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\);
g = Jd; \!\(\*OverscriptBox[\(g\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\);
f = Jd; \!\(\*OverscriptBox[\(f\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\);
m = Jd, d, k, e]; \!\(\*OverscriptBox[\(m\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\), d, k, e];
n = Jd, c, k, e];\!\(\*OverscriptBox[\(n\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\), c, k, e];
p = Jd, f]; \!\(\*OverscriptBox[\(p\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\), f];
q =Jd, g, k, f]; \!\(\*OverscriptBox[\(q\), \(_\)]\) = \!\(\*OverscriptBox[\(Jd\), \(_\)]\), g, k, f];
Simplify[{C -> c, D -> d, "E" -> e}]
Simplify[{H -> h, G -> g, F -> f}]
Simplify[{M -> m, N -> n, Q -> q}]
Simplify == k](*如果通过同一个点 B 的线段 AB 和 BQ 的复斜率相等,则 A、B、Q 三点共线*)
页: [1]
查看完整版本: 怎么证3点共线