继续:与AI协作制作立体几何展示工具
让抽象的空间,变得可触可及
演示地址:https://www.xsgzs.cn/demo/stereo-geometry.html

立体几何,大概是很多学生数学学习路上的“拦路虎”。根据《普通高中数学课程标准》要求,立体几何的核心教学目标之一,就是培养学生的直观想象素养,其中最关键的就是空间想象能力,帮助学生依托图形建立空间观念,感悟几何直观的价值,这也是新课标几何与代数主线中重点强调的素养要求之一。
但是明明我们就生活在三维世界里,空间感本应是与生俱来的能力,可为什么一到纸上的平面透视图,学生们就满脸困惑?答案很简单:我们画在纸上的,永远是“假的”立体图。
教立体几何多年,我总劝学生多动手画图,在笔尖的勾勒中找到平面与三维图形的对应关系——这是学好立体几何的关键。可现实是,会的学生早已开窍,不会的学生依然被困在“看不见”的困境里:黑板上的图形只有可见的几个面,被遮挡的棱、隐藏的高线,只能用虚线勉强示意,学生盯着黑板,眼神里满是迷茫:这到底是个什么样子?
科技在进步,教学不该停留在“黑板画图”的旧模式里。我迫切需要一个“会动”的立体图形,能在讲题时随时展示,让学生直观看到图形的每一个视角。在前篇终于实现GGB课件自由,用ai制作了GeoGebra课件生成工具,方便与ggb的使用了。有人会问:有GeoGebra这么强大的几何工具,为什么还要另起炉灶?
我的想法很简单:我要的是“教学展示工具”,不是“专业作图软件”。GeoGebra的强大毋庸置疑,但它的短板也很明显:触屏支持不佳,操作需要切换界面,需要提前准备,课堂上我需要在图形旁边随时标角度、画箭头、写推导步骤,而GeoGebra作为精准的几何作图环境,根本做不到这种“随手写写画画”的灵活性。
我的需求很明确,它不需要多复杂的数学运算,只需要贴合课堂教学场景:
-
能旋转拖拽,让学生直观看到图形的立体感,打破平面局限;
2.能快速拓展图形,两个顶点一点就能连线,不用输入复杂指令;
-
能自由添加线与面,先让学生思考,再揭晓答案,引导主动探究;
4.自带手绘白板,可随时在图形旁批注、推导,贴合课堂节奏;
-
触屏友好,手机、平板上也能流畅操作,课堂上可随时展示。
把需求告诉AI后,它很快给出了方案:“用Three.js配合OrbitControls,CDN引入不占服务器空间,左边放控制面板,右边放3D画布,完全能实现你的需求。”
“能做到吗?”我带着半信半疑的语气问。
“能。”AI的回答很干脆。
那时候我还不知道,“虚实线自动判断”这六个字,会成为接下来最折磨我的噩梦,却也最终成为这个工具最核心、最有价值的特性。
第一稿–当平面图形“活”了起来
当AI把第一稿发给我时,我点开页面的瞬间,就知道:这大概就是我想要的东西。
屏幕中央,一个正方体静静躺着。我用鼠标左键轻轻一拖,图形开始缓缓转动——绕到底面,能看到黑板上永远画不出来的视角;转到侧面,各条线的位置清晰可见,再也不用靠想象去推测。
那种感觉,就像玩了一辈子平面魔方,突然有人递给你一个真正的3D魔方,指尖转动间,所有隐藏的细节都一览无余。满心都是难以言喻的兴奋。
基础版的功能,比我预想的还要丰富:
- 图形切换
:三棱柱、四棱锥、正方体、三棱锥,一键切换,满足不同教学场景; - 辅助线开关
:高线、对角线,想看哪个点哪个,不用手动绘制; - 顶点标注
:A、B、C、D……字母始终朝向镜头,不会倒过来,方便课堂讲解; - 视角控制
:左键旋转、右键平移、滚轮缩放,操作简单,学生也能轻松上手。
试用了一会儿,我去掉一些不要的东西,又提出了新的需求:图形要能拓展,能修改顶点、增加点、添加线和面。AI很快完成了优化,一切都朝着顺利的方向推进。
我想着:先把虚实线的问题解决好,再加上旋转体,这个工具就完美了。于是我问AI:“能加更多图形吗?比如旋转体圆柱、圆锥?”
直到这时,我才真正意识到,“虚实线”这三个字,会成为横在我们面前的一道坎。
噩梦开始–虚实线的“玄学”判断
AI优化后,工具多了很多实用功能:顶点可以拖动、三点可以成面,还能生成半透明的辅助面。但最让我惊喜,也最让我头疼的,还是虚实线功能。
我先试了正方体——旋转图形,背面的棱自动变成虚线,转到侧面,被遮挡的棱也会随之变虚,完美贴合现实视角。这个效果,正是我想要的。
可当我切换到三棱柱时,瞬间傻眼了:所有的棱都是虚线,不管我怎么旋转视角,没有一条能变成实线,就像被按下了“永久虚线”的开关。
再试圆柱,更离谱:上底面整圈都是虚线,下底面整圈都是实线,无论我怎么转动图形,它俩都固执地保持不变。圆锥就更不用说了,AI自己都承认“比较丑”,曲面上的点密密麻麻,看着就让人头疼。
我开始一条条给AI反馈问题,把所有异常情况都列了出来:
“正方体及棱柱类,一开始点击连线都是虚线,转一圈也没有变实的时候”“圆柱和圆台画出来上底面就是虚线,下底面为实线”“连线大部分是实的,偶尔为虚,逻辑混乱”“曲面类和平面类的虚实判断逻辑不统一”
还有一个更离谱的问题:在三棱柱上连线,不管怎么旋转视角,线永远是虚的,就像被永远判了“虚刑”,没有任何翻身的机会。
AI开始排查代码,一会儿说“法线方向不对”,一会儿说“点积计算有误”,一会儿又要重写判断逻辑。那些专业术语听得我云里雾里,但我能感觉到,这个问题不简单。
后来我才明白,虚实线看起来简单,背后却藏着复杂的逻辑:它涉及法线计算、视角方向、深度判断,一条棱该不该被遮挡,取决于视角方向和法线方向的夹角——夹角大于90度,面朝你,就是实线;小于90度,背对你,就是虚线。
可道理虽简单,实际操作却难如登天:多面体的每一条棱都连着两个面,两个面的法线方向不同,该以哪个为准?更别提旋转体的曲面了,曲面上每个点的法线方向都不一样,根本没法用一套统一的逻辑去处理。
更麻烦的是,多面体和多面体不一样,旋转体和旋转体也不一样,一套算法根本无法通用。AI尝试修复法线方向计算,把动态计算改成从中心向外直接计算,可改完之后,有些图形好了,有些图形又出现了新的bug。
修一个,坏两个——这就是那段时间的常态。看着屏幕上全是虚线的三棱柱、固执不变的圆柱底面,我心里满是沮丧,甚至开始怀疑:这个功能,是不是根本做不出来?
AI也没有放弃,每次修复失败后,都会说一句:“我再想想……”
破局–旋转体的“微积分式”解法
如果说虚实线是一道坎,那旋转体(圆柱、圆锥、圆台)就是最难的那一关。
多面体的虚实线好歹有规律可循,算一算法线方向,再判断朝向,总能找到解决办法。但旋转体有曲面,曲面是光滑的,法线方向每一点都不同,根本没法简单判断“朝前”还是“朝后”。
我给AI指出了更深层的问题:
“旋转体刚出来就不对——上底面始终为虚线,下底面为实线。正确应该是轴截面的后方为虚线,前方为实线,下底面应该一半实线一半虚线。”“圆心拖动应该整个底面跟着动,而不是只有圆心动。”“轴截面应该画出来,但旋转时轴截面也在变,算法更难。”
我甚至开始怀疑:是不是旋转体根本不适合用算法生成?是不是只能一个个手动画?如果真是这样,这个工具的意义就大打折扣了——我要的不是一个只能展示预设图形的工具,而是一个灵活的、可交互的教学展示平台。
AI尝试了很多方案,效果都不理想。旋转体的虚实线,就像一堵墙,死死挡在我们面前。
直到有一次,AI在思考过程中说了一句话:“如果用32边形模拟圆,近似圆,算法就应该和多面体虚实判断一样了。”
我瞬间眼前一亮,当即给它点了个赞——对啊!这个思路太妙了,有点像微积分:用足够小的直线段去逼近曲线。32边形看起来和圆几乎没有区别,但在算法上,它就是多边形,和多面体的判断逻辑完全一致。
可做完后新的问题又出现了:我在底面上设置的点,只能在很小的范围内活动,无法自由沿着“圆”滑动。因为底层逻辑是32边形。
看着AI改来改去,反而把之前实现的功能弄出了新问题,甚至又改回之前淘汰的方案,我突然想到一个关键:不能把绘制和判断虚实分开吗?“只要在底面边上的点,就存在一个没有画出来的圆,这个点要在这个圆上跑啊。”
这句话,点醒了AI。
它很快明白了我的意思:近似的32边形边不能显示出来,要保持“圆”的样子,所以32条边里多余的母线和辅助点要隐藏,圆周上的辅助点也不能显示,只保留4个关键方位点;用户拖动圆周上的点时,点应该“真的在圆上跑”,而不是在32边形的顶点上跳来跳去——这需要在真正的圆上计算最近点,再映射回去。
这需要很强的约束逻辑,但AI懂了。我担心它做不好,反复追问,它给我解释了核心思路:
- 显示层
:只显示圆心(红色,带标签)和4个关键点(蓝色半透明),保持圆的视觉效果; - 隐藏层
:用32边形来计算虚实,沿用多面体的判断算法; - 约束层
:圆心拖动时整个底面跟着动,圆周点约束在“真正的圆”上滑动; - 轮廓层
:母线随圆心位置变化而变化,保证图形的完整性。
这个思路,比我想象的还要周全。
AI开始重构了旋转体的渲染逻辑,耗时很长,当我再打开页面时,圆柱的底面,终于不再全是虚线了。
它会随着视角变化,上半圆实、下半圆虚,或者反过来;转到侧面,下底面也是一半实一半虚,和现实中的视角完全一致。这,就是我想要的效果。
AI也松了口气,说:“旋转体和多面体统一算法了。”
那一刻我突然明白:这才是人和AI协作的正确姿势。不是AI给我一个完美答案让我照搬,也不是AI说什么我就信什么,而是我说出我的困惑、我的观察、我的直觉,AI在我的指引下找到方向。
人是指南针,AI是执行者。
(最后测试时还是有些小瑕疵,但已经足够好用了——毕竟内容越复杂,牵一发而动全身,些许不完美,反而更真实。)
至于球体,我最终放弃了——它的虚实判断逻辑更复杂,且课堂教学中用到的场景不多,与其花费大量时间完善,不如把现有功能做精,贴合实际教学需求。
写在最后–人与AI,互补共生
工具做完了,但我的思考没有停。
首先是迫切的需要复杂工程的规范工作流,AI的使用不能由他自由发挥,很不稳定,甚至快结束时,自作主张删去调试信息删多了直接页面崩溃,我让他改回去,说没有备份,改到一天前的备份,一天工作白做!AI是强大的工具,但永远需要人的指导。
这个项目里,虚实线的算法改了无数遍,旋转体的逻辑重构了两次。每一次突破,都不是AI独立完成的,而是我和AI不断对话、不断试错的结果。
没有人的判断和指引,AI很可能会在错误的路上走很远;但同样,没有AI的高效执行,我想做这个工具的想法,永远只能停留在脑子里。
人与AI,各有所长:人有直觉、有经验、有明确的方向,AI有高效、有耐心、能落地复杂的执行。互补,才能走得更远。
回到立体几何教学本身。
这个工具的价值,不在于它有多先进,不在于它用了多少复杂的技术,而在于它能让学生“看见”。
看见,才是理解的前提。
愿每一个学习立体几何的学生,都能打破抽象的壁垒,看见空间的美好,不再被“看不见”困住。
夜雨聆风