网易首页 > 网易号 > 正文 申请入驻

ChemDraw抄了30年的功能,这个程序员用3行代码破了局

0
分享至


化学绘图软件有个反直觉的bug:画分子结构时,点中原子很容易,点中那根细细的化学键却像抽奖。ChemDraw卖了30年许可证,这个交互难题被一位用领域驱动设计(Domain-Driven Design,DDD)重写克隆版的开发者用向量投影+钳制(clamping)算法解决了——核心代码不到20行。

原子检测:欧氏距离的"偷懒"艺术

检测鼠标是否悬停在原子上,是整件事里最仁慈的部分。每个原子在领域模型里存着精确的(x, y)坐标,开发者直接用欧氏距离公式:√[(x₂-x₁)² + (y₂-y₁)²]。鼠标位置与所有原子算一遍距离,过滤掉超出搜索半径的,再按距离排序取最小值。

代码里藏着个产品经理都懂的细节:当多个原子挤在搜索半径内时,系统永远选最近的那个。这不是什么高深算法,是对用户意图的尊重——你点下去的那一刻,软件猜的是"我想要离光标最近的东西",而不是"随便给我一个范围内的"。

实现代码很直白:遍历原子集合,map计算距离,filter筛候选,sort取首位。没有空间索引,没有R树优化,因为分子结构的原子数量级通常在几十到几百,暴力遍历的成本可以忽略。这种"先解决正确性,再考虑性能"的取舍,是DDD分层架构给的底气——领域层只关心业务规则,基础设施的优化可以后面再插。

化学键的"无限直线"陷阱:为什么经典公式会骗人


化学键的检测才是噩梦的开始。一根键是两个原子之间的线段,不是无限延伸的直线。开发者的第一直觉是用点到直线的距离公式 |Ax+By+C|/√(A²+B²),这公式在高中数学课本里躺了几十年,却藏着个致命的假设:它把线段当成无限长的直线来处理。

想象一下:画布上有上百个化学键,你点击某个空旷区域,但只要这个位置恰好和某根键的延长线重合,公式就会报"命中"。这种"幽灵碰撞"让用户体验崩塌——你以为点中了A键,软件却认为你点中了远在十万八千里外的B键的延长线。

问题的本质是对几何实体的建模错误。化学键在业务语义里是"有边界的连接",数学公式却把它抽象成"无边界的方向"。DDD在这里的价值凸显:领域模型必须忠实反映业务概念,而不是迁就数学便利。

向量投影+钳制:把数学拉回业务现实

解决方案需要把鼠标位置投影到线段上,然后做一件关键的事:钳制(clamping)。算法计算一个投影因子t,代表鼠标在AB线段方向上的相对位置。t=0对应A点,t=1对应B点,t=0.5对应中点。

核心就一行代码:t = Math.max(0, Math.min(1, (apx * abx + apy * aby) / abLengthSq))。这行代码把t强行锁死在[0,1]区间内——如果投影落在线段之外,就取最近的端点。换句话说,光标在线段延长线方向的任何位置,都被"拽"回线段的物理边界内。


钳制后的距离计算,才是真正有意义的"点到线段距离"。开发者用这个距离和搜索半径比较,决定是否命中。代码里还处理了退化情况:当两个原子重叠(abLengthSq为0)时,直接退化为点到点距离,避免除以零。

这个实现和经典游戏引擎的线段碰撞检测同源,但放在化学绘图这个垂直领域,它解决的是特定的问题:用户想选中的是"这个化学键",不是"这条直线上的某个抽象位置"。

从像素到意图:交互设计的最后一公里

技术实现只是 half the battle。搜索半径设多大?太小会让用户抓狂地瞄准,太大会导致误触。开发者没有透露具体数值,但留下了线索:这是一个"定义的搜索半径"(defined search radius),暗示这是可配置的领域规则,不是写死的魔法数字。

另一个隐藏细节是候选排序。原子检测按距离排序取最近,键的检测同样如此。当用户意图模糊时(比如光标刚好在两个键的交叉点附近),系统用距离做仲裁,而不是随机或按绘制顺序。这种一致性降低了用户的学习成本。

ChemDraw作为行业标准,其交互细节经过三十年打磨。这个DDD克隆版的意义不在于"做得更好",而在于证明:当领域模型足够清晰时,复杂交互可以被优雅地分解——原子是点,键是线段,命中检测是距离计算,边界处理是钳制。每一层都只做一件事,且做对一件事。

项目目前开源在GitHub,开发者还在迭代。下一个待解的问题可能是:当用户框选多个元素时,领域事件如何传播?或者,撤销操作在DDD的聚合根(Aggregate Root)边界内如何设计?

如果你用过ChemDraw,有没有被选中化学键的精度折磨过?这个3行核心代码的解决方案,和你的肌肉记忆匹配吗?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
80岁不管存款多少,记得提前给自己准备4样东西,建议了解

80岁不管存款多少,记得提前给自己准备4样东西,建议了解

小谈食刻美食
2026-04-27 07:57:04
网红白冰偷税911.18万后续:妻子奢华生活曝光,圈内人发声吐槽!

网红白冰偷税911.18万后续:妻子奢华生活曝光,圈内人发声吐槽!

古希腊掌管松饼的神
2026-04-28 13:16:28
“全班妈妈,就你最丑”,妈妈开家长会被儿子嫌弃,网友一语中的

“全班妈妈,就你最丑”,妈妈开家长会被儿子嫌弃,网友一语中的

妍妍教育日记
2026-04-27 12:35:03
柳州官方通报“酒店谎称老板离世,从4晚共494元涨价至569元一晚”:市监局已立案调查,将依法依规严肃查处

柳州官方通报“酒店谎称老板离世,从4晚共494元涨价至569元一晚”:市监局已立案调查,将依法依规严肃查处

扬子晚报
2026-04-28 07:45:48
打也不打,谈也不谈,美国就是想耗死伊朗

打也不打,谈也不谈,美国就是想耗死伊朗

廖保平
2026-04-26 09:33:28
牛散栽了!张素芬1263万股重仓芯片股,从17元跌到3元

牛散栽了!张素芬1263万股重仓芯片股,从17元跌到3元

慧眼看世界哈哈
2026-04-28 08:23:03
孩子脱臼复位只收100元,家长举报乱收费!卫健委:应收110元,你还少给了!家长拒缴费后离开!

孩子脱臼复位只收100元,家长举报乱收费!卫健委:应收110元,你还少给了!家长拒缴费后离开!

医脉圈
2026-04-25 20:04:06
凌晨4点,辽宁舰甲板上的生死40分钟:当歼-15挂着实弹压向2000米

凌晨4点,辽宁舰甲板上的生死40分钟:当歼-15挂着实弹压向2000米

荷兰豆爱健康
2026-04-27 13:20:59
辟谣帖:日本对公职人员巨额财产来源不明,有哪些刑事处罚?

辟谣帖:日本对公职人员巨额财产来源不明,有哪些刑事处罚?

生活时尚导刊
2026-04-28 11:14:39
姚高员辞去杭州市市长职务

姚高员辞去杭州市市长职务

澎湃新闻
2026-04-27 21:04:26
泡泡玛特推出Labubu冰箱,售价5999元,上千人预约

泡泡玛特推出Labubu冰箱,售价5999元,上千人预约

大象新闻
2026-04-26 13:01:02
水官高速免费后才发现有些深圳人很抠,连10块钱都舍不得出

水官高速免费后才发现有些深圳人很抠,连10块钱都舍不得出

虎哥闲聊
2026-04-28 09:36:10
段永平:投资就是买未来现金流,90%的人却搞反了

段永平:投资就是买未来现金流,90%的人却搞反了

新浪财经
2026-04-27 03:11:48
特朗普在白宫迎接英王,共进下午茶,系查尔斯三世即位后首次访美

特朗普在白宫迎接英王,共进下午茶,系查尔斯三世即位后首次访美

新京报
2026-04-28 09:21:07
真无耻:当下社会的三大精神堕落

真无耻:当下社会的三大精神堕落

木虫
2026-04-20 06:27:48
2-0掀翻意大利,中国U15凭啥让老外闭嘴?日本青训秘密藏不住了!

2-0掀翻意大利,中国U15凭啥让老外闭嘴?日本青训秘密藏不住了!

落夜足球
2026-04-28 11:30:54
4瓶“鲜牛奶”,只有1瓶是真鲜奶

4瓶“鲜牛奶”,只有1瓶是真鲜奶

财观潮头
2026-04-27 20:08:37
杰伦-格林:我很感激菲尼克斯,为狄龙感到超级骄傲

杰伦-格林:我很感激菲尼克斯,为狄龙感到超级骄傲

懂球帝
2026-04-28 15:58:07
北京车展追觅展车竟是「模型」?网友:熟悉的味道

北京车展追觅展车竟是「模型」?网友:熟悉的味道

三言科技
2026-04-27 15:18:24
朝鲜获赠德国“豹2”、美国M1A1坦克,这下朝鲜又有好东西山寨了

朝鲜获赠德国“豹2”、美国M1A1坦克,这下朝鲜又有好东西山寨了

蓝星杂谈
2026-04-27 17:33:21
2026-04-28 16:36:49
爬虫饲养员
爬虫饲养员
业余养了只叫“龙虾”的AI爬虫,主业是给互联网打工。
1842文章数 17关注度
往期回顾 全部

科技要闻

10亿周活目标落空!传OpenAI爆发内部分歧

头条要闻

尹锡悦夫人金建希涉操纵股价及受贿案宣判 获刑4年

头条要闻

尹锡悦夫人金建希涉操纵股价及受贿案宣判 获刑4年

体育要闻

季后赛最新局势:雷霆4-0晋级首队 4队3-1

娱乐要闻

蔡卓妍官宣结婚,老公比她小10岁

财经要闻

俞敏洪再遭重击

汽车要闻

拒绝疯狂套娃!现代艾尼氪金星长在未来审美点上

态度原创

房产
艺术
数码
游戏
军事航空

房产要闻

信号!海南商业版图,迎来大变局!

艺术要闻

静·观--第二届全国静物油画作品展 作品选刊

数码要闻

华硕灵耀16 Air骁龙版:1.2kg高科技陶瓷铝机身 全能生产力本

《大航海时代:起源》公测开启,带你体验硬核的海上生存与博弈

军事要闻

德国总理默茨:美国正遭受伊朗领导层的羞辱

无障碍浏览 进入关怀版