JSXGraph非无限线段与圆求交仍按无限直线计算交点异常问题
问题原因
JSXGraph的交点计算逻辑中,alwaysIntersect: false仅针对无限直线的交点生效,你通过line元素加straightFirst: false、straightLast: false模拟的有限线段,不会被交点计算模块识别为有限长度对象,求解时仍然按无限直线计算两个数学交点,不在线段范围内的交点也不会自动隐藏。
解决方案
直接使用JSXGraph原生的segment元素创建有限线段,原生线段的交点计算逻辑会自动限制在两个端点的范围内,不在线段上的交点会默认不显示,不需要额外配置alwaysIntersect参数。
修正后的代码如下:
var segment = app.board.create('segment', [[-2,-2],[1,1]], {}) var circle = app.board.create('circle', [[0,0],[-2,0]], {}) // 交点会自动判断是否落在线段范围内,不符合条件的自动隐藏 app.board.create('intersection', [segment, circle, 0]) app.board.create('intersection', [segment, circle, 1])
如果有特殊需求必须用line元素模拟线段,可以手动给交点添加可见性判断回调:
var line = app.board.create('line', [[-2,-2],[1,1]], {straightFirst:false, straightLast:false }) var circle = app.board.create('circle', [[0,0],[-2,0]], { }) app.board.create('intersection', [line, circle, 0], { visible: function() { return this.isOnSegment(this.point1.coords.usrCoords, this.point2.coords.usrCoords, this.coords.usrCoords); } }) app.board.create('intersection', [line, circle, 1], { visible: function() { return this.isOnSegment(this.point1.coords.usrCoords, this.point2.coords.usrCoords, this.coords.usrCoords); } })
内容的提问来源于stack exchange,提问作者Porizm
相关产品推荐
相关产品推荐

