英式跳棋的几何化建模与跳跃判定
几何画板及绘图内容加载中,请稍等……
该范例通过几何方式模拟英式跳棋在棋盘格上的跳跃与可行走步,展示哪些位置可被跳到以及可移动/可跳跃状态的变化。核心数学概念包括集合运算与逻辑条件(if 分支)、几何构型(多边形/网格区域)、对称性思想与离散位置的组织方式,以及将规则表示为可计算的“可达集合”。作图要点:其构造摘要表明使用了 Flatten、Union、RemoveUndefined 对对象进行集合合并与清理,再结合 If 来筛选跳跃/移动的条件;同时用 Polygon 生成棋盘格或路径相关的多边形区域,并用 Sequence 产生规则所需的离散序列索引。涉及的关键对象包含 checkerAk、checkerBs、checkerAs 等棋子状态集合,以及 all、spaces、jumpable*、movable* 等“可跳跃/可移动”对象集合,还包含用于定义棋盘结构或几何片段的 SA 与多组 s11/s13/…/s68 等子对象。适合中学数学(离散数学/逻辑初步/集合思想)与信息科技跨学科建模课堂,用于培养规则形式化、几何建模与算法化表达能力。
GeoGebra 命令及参数
Flatten(Sequence[Sequence[(k + Mod[l + 1, 2], l), l, 1, 8], k, 1, 7, 2]) → allUnion(checkerAs, checkerAk) → checkerAallUnion(checkerBs, checkerBk) → checkerBallRemoveUndefined(Sequence[If[checkerBs(k) + (1, -1) ∈ checkerAall ∧ checkerBs(k) + (2, -2) ∈ spaces ∨ checkerBs(k) + (-1, -1) ∈ checkerAall ∧ checkerBs(k) + (-2, -2) ∈ spaces, checkerBs(k)], k, 1, Length[checkerBs]]) → jumpableBsRemoveUndefined(Sequence[If[checkerAs(k) + (1, 1) ∈ checkerBall ∧ checkerAs(k) + (2, 2) ∈ spaces ∨ checkerAs(k) + (-1, 1) ∈ checkerBall ∧ checkerAs(k) + (-2, 2) ∈ spaces, checkerAs(k)], k, 1, Length[checkerAs]]) → jumpableAsRemoveUndefined(Sequence[If[checkerBk(k) + (1, 1) ∈ checkerAall ∧ checkerBk(k) + (2, 2) ∈ spaces ∨ checkerBk(k) + (-1, 1) ∈ checkerAall ∧ checkerBk(k) + (-2, 2) ∈ spaces ∨ checkerBk(k) + (1, -1) ∈ checkerAall ∧ checkerBk(k) + (2, -2) ∈ spaces ∨ checkerBk(k) + (-1, -1) ∈ checkerAall ∧ checkerBk(k) + (-2, -2) ∈ spaces, checkerBk(k)], k, 1, Length[checkerBk]]) → jumpableBkRemoveUndefined(Sequence[If[checkerAk(k) + (1, 1) ∈ checkerBall ∧ checkerAk(k) + (2, 2) ∈ spaces ∨ checkerAk(k) + (-1, 1) ∈ checkerBall ∧ checkerAk(k) + (-2, 2) ∈ spaces ∨ checkerAk(k) + (1, -1) ∈ checkerBall ∧ checkerAk(k) + (2, -2) ∈ spaces ∨ checkerAk(k) + (-1, -1) ∈ checkerBall ∧ checkerAk(k) + (-2, -2) ∈ spaces, checkerAk(k)], k, 1, Length[checkerAk]]) → jumpableAkIf(jumpableBs ≟ {}, RemoveUndefined[Sequence[If[checkerBs(k) + (1, -1) ∈ spaces ∨ checkerBs(k) + (-1, -1) ∈ spaces, checkerBs(k)], k, 1, Length[checkerBs]]], jumpableBs) → movableBsIf(jumpableBk ≟ {}, RemoveUndefined[Sequence[If[checkerBk(k) + (1, 1) ∈ spaces ∨ checkerBk(k) + (-1, 1) ∈ spaces ∨ checkerBk(k) + (1, -1) ∈ spaces ∨ checkerBk(k) + (-1, -1) ∈ spaces, checkerBk(k)], k, 1, Length[checkerBk]]], jumpableBk) → movableBkIf(jumpableAs ≟ {}, RemoveUndefined[Sequence[If[checkerAs(k) + (1, 1) ∈ spaces ∨ checkerAs(k) + (-1, 1) ∈ spaces, checkerAs(k)], k, 1, Length[checkerAs]]], jumpableAs) → movableAsIf(jumpableAk ≟ {}, RemoveUndefined[Sequence[If[checkerAk(k) + (1, 1) ∈ spaces ∨ checkerAk(k) + (-1, 1) ∈ spaces ∨ checkerAk(k) + (1, -1) ∈ spaces ∨ checkerAk(k) + (-1, -1) ∈ spaces, checkerAk(k)], k, 1, Length[checkerAk]]], jumpableAk) → movableAkPolygon({(1 - 0.5, 3 - 0.5), (1 + 0.5, 3 - 0.5), (1 + 0.5, 3 + 0.5), (1 - 0.5, 3 + 0.5)}) → s13Polygon({(1 - 0.5, 5 - 0.5), (1 + 0.5, 5 - 0.5), (1 + 0.5, 5 + 0.5), (1 - 0.5, 5 + 0.5)}) → s15Polygon({(1 - 0.5, 7 - 0.5), (1 + 0.5, 7 - 0.5), (1 + 0.5, 7 + 0.5), (1 - 0.5, 7 + 0.5)}) → s17Polygon({(1 - 0.5, 1 - 0.5), (1 + 0.5, 1 - 0.5), (1 + 0.5, 1 + 0.5), (1 - 0.5, 1 + 0.5)}) → s11Polygon({(2 - 0.5, 2 - 0.5), (2 + 0.5, 2 - 0.5), (2 + 0.5, 2 + 0.5), (2 - 0.5, 2 + 0.5)}) → s22Polygon({(2 - 0.5, 4 - 0.5), (2 + 0.5, 4 - 0.5), (2 + 0.5, 4 + 0.5), (2 - 0.5, 4 + 0.5)}) → s24Polygon({(2 - 0.5, 6 - 0.5), (2 + 0.5, 6 - 0.5), (2 + 0.5, 6 + 0.5), (2 - 0.5, 6 + 0.5)}) → s26Polygon({(2 - 0.5, 8 - 0.5), (2 + 0.5, 8 - 0.5), (2 + 0.5, 8 + 0.5), (2 - 0.5, 8 + 0.5)}) → s28Polygon({(3 - 0.5, 3 - 0.5), (3 + 0.5, 3 - 0.5), (3 + 0.5, 3 + 0.5), (3 - 0.5, 3 + 0.5)}) → s33Polygon({(3 - 0.5, 5 - 0.5), (3 + 0.5, 5 - 0.5), (3 + 0.5, 5 + 0.5), (3 - 0.5, 5 + 0.5)}) → s35Polygon({(3 - 0.5, 7 - 0.5), (3 + 0.5, 7 - 0.5), (3 + 0.5, 7 + 0.5), (3 - 0.5, 7 + 0.5)}) → s37Polygon({(3 - 0.5, 1 - 0.5), (3 + 0.5, 1 - 0.5), (3 + 0.5, 1 + 0.5), (3 - 0.5, 1 + 0.5)}) → s31Polygon({(4 - 0.5, 4 - 0.5), (4 + 0.5, 4 - 0.5), (4 + 0.5, 4 + 0.5), (4 - 0.5, 4 + 0.5)}) → s44Polygon({(4 - 0.5, 6 - 0.5), (4 + 0.5, 6 - 0.5), (4 + 0.5, 6 + 0.5), (4 - 0.5, 6 + 0.5)}) → s46Polygon({(4 - 0.5, 8 - 0.5), (4 + 0.5, 8 - 0.5), (4 + 0.5, 8 + 0.5), (4 - 0.5, 8 + 0.5)}) → s48Polygon({(4 - 0.5, 2 - 0.5), (4 + 0.5, 2 - 0.5), (4 + 0.5, 2 + 0.5), (4 - 0.5, 2 + 0.5)}) → s42Polygon({(5 - 0.5, 3 - 0.5), (5 + 0.5, 3 - 0.5), (5 + 0.5, 3 + 0.5), (5 - 0.5, 3 + 0.5)}) → s53Polygon({(5 - 0.5, 5 - 0.5), (5 + 0.5, 5 - 0.5), (5 + 0.5, 5 + 0.5), (5 - 0.5, 5 + 0.5)}) → s55Polygon({(5 - 0.5, 7 - 0.5), (5 + 0.5, 7 - 0.5), (5 + 0.5, 7 + 0.5), (5 - 0.5, 7 + 0.5)}) → s57Polygon({(5 - 0.5, 1 - 0.5), (5 + 0.5, 1 - 0.5), (5 + 0.5, 1 + 0.5), (5 - 0.5, 1 + 0.5)}) → s51Polygon({(6 - 0.5, 4 - 0.5), (6 + 0.5, 4 - 0.5), (6 + 0.5, 4 + 0.5), (6 - 0.5, 4 + 0.5)}) → s64Polygon({(6 - 0.5, 6 - 0.5), (6 + 0.5, 6 - 0.5), (6 + 0.5, 6 + 0.5), (6 - 0.5, 6 + 0.5)}) → s66Polygon({(6 - 0.5, 8 - 0.5), (6 + 0.5, 8 - 0.5), (6 + 0.5, 8 + 0.5), (6 - 0.5, 8 + 0.5)}) → s68Polygon({(6 - 0.5, 2 - 0.5), (6 + 0.5, 2 - 0.5), (6 + 0.5, 2 + 0.5), (6 - 0.5, 2 + 0.5)}) → s62Polygon({(7 - 0.5, 3 - 0.5), (7 + 0.5, 3 - 0.5), (7 + 0.5, 3 + 0.5), (7 - 0.5, 3 + 0.5)}) → s73Polygon({(7 - 0.5, 5 - 0.5), (7 + 0.5, 5 - 0.5), (7 + 0.5, 5 + 0.5), (7 - 0.5, 5 + 0.5)}) → s75Polygon({(7 - 0.5, 7 - 0.5), (7 + 0.5, 7 - 0.5), (7 + 0.5, 7 + 0.5), (7 - 0.5, 7 + 0.5)}) → s77Polygon({(7 - 0.5, 1 - 0.5), (7 + 0.5, 1 - 0.5), (7 + 0.5, 1 + 0.5), (7 - 0.5, 1 + 0.5)}) → s71Polygon({(8 - 0.5, 4 - 0.5), (8 + 0.5, 4 - 0.5), (8 + 0.5, 4 + 0.5), (8 - 0.5, 4 + 0.5)}) → s84Polygon({(8 - 0.5, 6 - 0.5), (8 + 0.5, 6 - 0.5), (8 + 0.5, 6 + 0.5), (8 - 0.5, 6 + 0.5)}) → s86Polygon({(8 - 0.5, 8 - 0.5), (8 + 0.5, 8 - 0.5), (8 + 0.5, 8 + 0.5), (8 - 0.5, 8 + 0.5)}) → s88Polygon({(8 - 0.5, 2 - 0.5), (8 + 0.5, 2 - 0.5), (8 + 0.5, 2 + 0.5), (8 - 0.5, 2 + 0.5)}) → s82Polygon({(0.5, 0.5), (8.5, 0.5), (8.5, 8.5), (0.5, 8.5)}) → boardedgeSequence(Sequence[Polygon[{(l + Mod[k + 1, 2] - 0.5, k - 0.5), (l + Mod[k + 1, 2] - 0.5, k + 0.5), (l + Mod[k + 1, 2] + 0.5, k + 0.5), (l + Mod[k + 1, 2] + 0.5, k - 0.5)}], l, 1, 7, 2], k, 1, 8) → boardRemoveUndefined({If[SA + (1, 1) ∈ checkerBall ∧ SA + (2, 2) ∈ spaces, SA + (2, 2)], If[SA + (-1, 1) ∈ checkerBall ∧ SA + (-2, 2) ∈ spaces, SA + (-2, 2)], If[SA ∈ checkerAk ∧ SA + (1, -1) ∈ checkerBall ∧ SA + (2, -2) ∈ spaces, SA + (2, -2)], If[SA ∈ checkerAk ∧ SA + (-1, -1) ∈ checkerBall ∧ SA + (-2, -2) ∈ spaces, SA + (-2, -2)]}) → jumpAtoRemoveUndefined({If[SB + (1, -1) ∈ checkerAall ∧ SB + (2, -2) ∈ spaces, SB + (2, -2)], If[SB + (-1, -1) ∈ checkerAall ∧ SB + (-2, -2) ∈ spaces, SB + (-2, -2)], If[SB ∈ checkerBk ∧ SB + (1, 1) ∈ checkerAall ∧ SB + (2, 2) ∈ spaces, SB + (2, 2)], If[SB ∈ checkerBk ∧ SB + (-1, 1) ∈ checkerAall ∧ SB + (-2, 2) ∈ spaces, SB + (-2, 2)]}) → jumpBtoIf(jumpableAs ≟ {} ∧ jumpableAk ≟ {}, Union[movableAs, movableAk], jumpableAs ≠ {} ∧ jumpableAk ≠ {}, Union[jumpableAs, jumpableAk], jumpableAs ≠ {} ∧ jumpableAk ≟ {}, jumpableAs, jumpableAs ≟ {} ∧ jumpableAk ≠ {}, jumpableAk) → movableAallIf(jumpableBs ≟ {} ∧ jumpableBk ≟ {}, Union[movableBs, movableBk], jumpableBs ≠ {} ∧ jumpableBk ≠ {}, Union[jumpableBs, jumpableBk], jumpableBs ≠ {} ∧ jumpableBk ≟ {}, jumpableBs, jumpableBs ≟ {} ∧ jumpableBk ≠ {}, jumpableBk) → movableBallRemoveUndefined({If[SA + (1, 1) ∈ spaces, SA + (1, 1)], If[SA + (-1, 1) ∈ spaces, SA + (-1, 1)], If[SA ∈ checkerAk ∧ SA + (1, -1) ∈ spaces, SA + (1, -1)], If[SA ∈ checkerAk ∧ SA + (-1, -1) ∈ spaces, SA + (-1, -1)]}) → moveAtoRemoveUndefined({If[SB + (1, -1) ∈ spaces, SB + (1, -1)], If[SB + (-1, -1) ∈ spaces, SB + (-1, -1)], If[SB ∈ checkerBk ∧ SB + (1, 1) ∈ spaces, SB + (1, 1)], If[SB ∈ checkerBk ∧ SB + (-1, 1) ∈ spaces, SB + (-1, 1)]}) → moveBtoIf(movableBall ≟ {} ∨ checkerBall ≟ {}, true, false) → winnerAIf(movableAall ≟ {} ∨ checkerAall ≟ {}, true, false) → winnerBPolygon(Corner[1], Corner[2], Corner[3], Corner[4]) → maskEndgame, f, g, h, i
AI 绘图提示语参考
画一个8×8的英式跳棋棋盘的几何化示意:用多边形块表示可用棋格区域,并在棋盘边界外加一条整体外框。把棋格以行列坐标构成,并给出若干代表特定格点的方形区域,多处标注为跳子落点候选与普通走子候选。再在同一画面中呈现两类棋子集合分别对应两方(记作两种棋子状态),用集合关系把所有棋子位置展开成候选坐标集合,依据“相邻一格有对方且下一格为空”的规则筛出可跳跃落点;若不能跳则用相邻空格筛出可移动落点。最后将得到的可跳跃与可移动落点集合以不同高亮区域显示在棋盘上。
以上提示语为根据原始绘图命令整理而来,仅供参考。