中点计算器

把两个端点的 x、y 坐标填进去,立刻得到这条线段的中点坐标,并把线段长度、斜率、以及按比例取的内分点一起算出来;四个坐标可以是负数也可以是小数。

演示:P₁=(2, 4)、P₂=(8, 10)、t=0.25。Δx=6、Δy=6,中点 (5.0000, 7.0000),长度 8.4853,斜率 1.0000。数值仅作演示,与下方对照表第 1 行同源。

固定 P₁=(2, 4)、y₂=10,x₂ 从 8 到 30 每次加 2,默认显示 12 行
x₂中点 M线段长度斜率 k
8(5.0000, 7.0000)8.48531.0000
10(6.0000, 7.0000)10.00000.7500
12(7.0000, 7.0000)11.66190.6000
14(8.0000, 7.0000)13.41640.5000
16(9.0000, 7.0000)15.23150.4286
18(10.0000, 7.0000)17.08800.3750
20(11.0000, 7.0000)18.97370.3333
22(12.0000, 7.0000)20.88060.3000
24(13.0000, 7.0000)22.80350.2727
26(14.0000, 7.0000)24.73860.2500
28(15.0000, 7.0000)26.68330.2308
30(16.0000, 7.0000)28.63560.2143

使用方法

  1. 在「端点 P₁」的两个框里填第一个点的坐标,示例 x₁ = 2、y₁ = 4。四个坐标必须同一单位,一半厘米一半米算出来的中点没有意义。
  2. 在「端点 P₂」的两个框里填第二个点的坐标,示例 x₂ = 8、y₂ = 10。改动任意一个框都会立刻重算,不需要再点按钮。
  3. 「内分比例 t」填 0 到 1 之间的小数,示例 0.25,读作「从 P₁ 朝 P₂ 走全程的 25%」。t = 0.5 时内分点就是中点本身,t = 0 得到 P₁、t = 1 得到 P₂。
  4. 看结果区四格:中点坐标、线段长度、斜率、内分点坐标;下方说明行会写出这次用到的 Δx 与 Δy,方便和手算对一遍。
  5. 在任一输入框里按裸 Enter 也能触发计算;想回到默认值就点「载入示例」,它填的是 2 / 4 / 8 / 10 / 0.25 这一组。

这个中点计算器能解决什么问题

第一类场景是图纸与加工:两个孔、两个定位点之间要找对称位置,或者要在两个既有孔中间再补一个孔,中点就是唯一的几何解,用尺规量不如直接代值。

第二类场景是图形与界面布局:把一段线、一个矩形按中心对齐或做缩放时,先求中点再平移,比「先平移再目测居中」少一步试错。前端里常见的是拿两个元素的坐标算中心点,再决定浮层放哪儿。

第三类场景是会合与调度:平面上两个人各报一个坐标,取中点作为碰面点。要注意这里用的是平面直角坐标,不是经纬度——地球是球面,两地的「中点」要用大圆中点,本页不做。

第四类场景是复核作业与手算:把 Δx、Δy 打出来看一眼,就知道是不是把 x 和 y 填串行了;中点坐标的两个分量必须分别落在两个端点之间,超出区间就说明填错了。

这个中点计算器不做的事也说清楚:不处理三个及以上点(那是重心 / 质心,不是中点),不处理球面经纬度中点,不计算面积与周长,也不做单位换算——单位要你自己先统一。

原理与规则说明

核心就一条中点公式:M = ((x₁+x₂)/2, (y₁+y₂)/2),两个分量各自取算术平均,互不影响。内分点是把同一个思路推广:P = P₁ + t·(P₂ − P₁),展开就是 (x₁ + t·Δx, y₁ + t·Δy);t = 0.5 时它退化回中点,所以中点只是内分点在 t = 0.5 时的特例。

线段长度本页调用的是 Math.hypot(Δx, Δy),而不是手写 Math.sqrt(Δx*Δx + Δy*Δy)。这不是风格问题:平方这一步会先溢出。取 Δx = Δy = 1e200,Math.sqrt(1e200*1e200 + 1e200*1e200) 得到 Infinity,而 Math.hypot(1e200, 1e200) 给出 1.414213562373095e+200——hypot 内部按量级缩放后再开方,避开了中间平方的溢出。本页坐标上限是 1e12,正常用不到这条,但选函数时就得按最坏情况选。

斜率是 k = Δy / Δx。Δx = 0 时分母为零,本页不显示 Infinity,而是显示「竖直」;Δy = 0 时 k = 0.0000,读作水平。这两个是几何事实,不是报错。

遵循的标准有两条:坐标系是笛卡尔平面直角坐标系(x 向右为正、y 向上为正);数值按 IEEE 754 双精度浮点,它的安全整数上限是 2^53 = 9007199254740992,坐标绝对值超过这个数就不再能精确表示。举一个实测的例子:1e16 与 1e16+2 求和再除以 2,得到 10000000000000000 而不是 10000000000000002——不是公式错了,是这个量级上 +2 已经被浮点吃掉了。量纲一致性按 ISO 80000-2 对数学符号与量纲的要求:参与同一条公式的量必须同量纲,x 用米、y 用厘米时中点和斜率都不成立。

输入到输出的完整链条是:trim 掉首尾空格 → Number() 转数值 → 有限性与范围校验 → 算 Δx = x₂ − x₁、Δy = y₂ − y₁ → 中点取算术平均 → 长度走 hypot → 斜率走除法 → 内分点走加权平均 → 每个结果 toFixed(4) 后输出。

最常见的误用是拿它算三个点。三个点的等权平均是重心:示例 (2,4)、(8,10)、(5,3) 的平均是 (5.0000, 5.6667),它不是任何一条边的中点,本页也拒绝把它叫中点。第二个误用是坐标系搞反:屏幕坐标 y 轴向下,同一对端点 (2,4)、(8,10) 在屏幕坐标下斜率变成 −1.0000,而数学坐标下是 1.0000,符号相反但中点的 y 值不变。

完整示例(数值仅作演示)

默认输入是 P₁ = (2, 4)、P₂ = (8, 10)、t = 0.25,这组数字同时出现在表单默认值和下方对照表的第 1 行(x₂ = 8),三处咬合。

再换一组看趋势:把 P₂ 拉到 (20, 10),Δx 变成 18,中点走到 (11.0000, 7.0000),长度升到 18.9737,斜率降到 0.3333——y 不变而 x 拉远时,中点沿水平方向平移,斜率按 1/Δx 衰减,这条反比关系在对照表里一行一行都能对上。

输入范围与对照表

四个坐标框接受 −1000000000000 到 1000000000000 之间的任意数值,允许负号与小数;内分比例 t 只接受 0 到 1,步长 0.01。下面这张表固定 P₁ = (2, 4)、y₂ = 10,让 x₂ 从 8 走到 30,用来观察「端点拉远时中点和斜率各自怎么变」。

对照表口径说明(数值仅作演示)
项目取值说明
固定端点P₁=(2, 4),y₂=10与表单默认值一致
扫描区间x₂:8 → 30步长 2,共 12 行
中点区间(5, 7) → (16, 7)横坐标每次 +1,纵坐标恒为 7
长度区间8.4853 → 28.6356随 Δx 单调增
斜率区间1.0000 → 0.2143随 Δx 单调减
第 1 行x₂ = 8即默认示例所在行
加载更多x₂:32 → 50再补 10 行,共 22 行

点「加载更多」把表补到 22 行;点「导出对照表 CSV」下载带 BOM 的表格文件(Excel 双击打开中文不乱码);点「复制对照表 TSV」把整张表复制成制表符分隔文本,可直接粘进表格软件。

边界与精度说明

两点重合(Δx = Δy = 0)是合法输入,不是错误:长度算出 0.0000,斜率显示「—」并在说明行注明「两点重合,斜率无定义」。本页不会把这种输入改成报错,因为几何上它就是一条退化线段。

Δx = 0 而 Δy ≠ 0 时,长度正常,斜率显示「竖直」;Δy = 0 而 Δx ≠ 0 时斜率显示 0.0000,读作水平。这两处都不走「除以零得 Infinity」的默认路径。

三条会真的拒收并给具体文案的路径:坐标绝对值超过 1e12(提示确认量级与单位)、t 超出 0 到 1(提示外分点不在本页范围)、填了非数字或留空(提示是哪个框、允许什么范围)。拒收时结果区保留上一次的有效结果,不会被清零。

精度方面,所有结果统一保留 4 位小数,这是本工具的输出约定;再往后是浮点噪声而不是精度。例如长度 8.485281… 显示为 8.4853。要强调的是:只有显示层四舍五入,参与下一次运算的仍是完整双精度值,所以「先算中点、再以内分点公式反推」不会因为显示位数产生累积误差。

还有一条与浮点有关的边界:坐标绝对值超过 2^53 = 9007199254740992 后整数不再能精确表示,本页虽然允许填到 1e12,但如果你把坐标写成 1e16 量级,结果的末位就不可信了,请把单位换成更大的量级(比如把毫米换成千米)再填。

常见问题

中点和「平均数」是一回事吗?

中点是两个端点的几何中点,公式是算术平均;但它只对两个点定义。把一组数据的平均值叫中点是不对的,那是均值,二者在三个点以上就分道扬镳。

三个点能不能用这个页面算中点?

不能。三个点的等权平均是重心,示例 (2,4)、(8,10)、(5,3) 的平均是 (5.0000, 5.6667),它不落在任何一条边的中点上。请拆成两条边分别求中点。

斜率显示「竖直」是什么意思?

表示 Δx = 0,也就是两个端点 x 坐标相同,线段垂直于 x 轴。这时 k = Δy/0 在数学上无定义,本页不用 Infinity 表示,因为 Infinity 会让人误以为斜率「很大」。

为什么长度用 Math.hypot 而不是直接开方?

因为先平方会溢出。Δx = 1e200 时 Δx*Δx 已经是 Infinity,sqrt 后仍是 Infinity;hypot 内部先按量级缩放再开方,同样输入给 1.414213562373095e+200。

四个坐标单位不一致会怎样?

页面不会拦你,但结果没有物理意义。x 用米、y 用厘米时,中点坐标的两个分量量纲不同,斜率也变成「米每厘米」这种混合单位。请先换算成同一单位。

屏幕坐标算出来的斜率为什么是负的?

屏幕坐标系 y 轴向下。同一对端点 (2,4)、(8,10) 在数学坐标下斜率 1.0000,在屏幕坐标下是 −1.0000。中点的 y 值不受影响,只有斜率与方向相关的量会反号。

内分比例 t 填 1.5 会怎样?

会被拒收并提示「内分比例 t 只能在 0 到 1 之间」。t > 1 或 t < 0 得到的是外分点,落在整条线段的延长线上,属于另一种构造,本页不做。

输入的坐标会被上传吗?

不会。四个坐标只参与页面内存里的加减乘除与 hypot 调用,不发任何网络请求;在开发者工具的 Network 面板里除了页面自身资源不会出现新请求,刷新页面后输入即清空。

相关工具

中点计算器只负责平面两点的算术平均这一件事,坐标要统一单位、要在图上量取,都有各自的页面。