JavaScript多段线实现布尔运算的方法
程序员文章站
2022-04-13 16:07:53
这篇文章主要介绍多段线实现布尔运算的方法
//获得布尔运算后的全部曲线
function getoperatedcurves(sourcecurs: curve[]...
这篇文章主要介绍多段线实现布尔运算的方法
//获得布尔运算后的全部曲线 function getoperatedcurves(sourcecurs: curve[], targetcus: curve[]) { let source: polyline | circle = (sourcecurs[0] instanceof circle) ? sourcecurs[0] as circle : new polyline().combine(sourcecurs)[0]; let target: polyline | circle = (targetcus[0] instanceof circle) ? targetcus[0] as circle : new polyline().combine(targetcus)[0]; try { if (!source.isclose || !target.isclose) throw new error("不是封闭曲线"); } catch (err) { console.log(err); } let interpts = source.intersectwith(target, intersectoption.onbothoperands); let sourcecontainertarget = istargetcurinsourcecur(source, target); let targetcontainersource = istargetcurinsourcecur(target, source); let iscontainer = sourcecontainertarget || targetcontainersource; let intersectionlist: curve[] = []; //交集 let unionlist: curve[] = []; //并集 let sublist: curve[] = []; //补集 /* *两封闭区域有交点并且不是包含关系,则通过交点把区域分割 */ if (interpts.length && !iscontainer) { let pars1 = interpts.map(p => source.getparamatpoint(p)).sort((a, b) => a - b); let pars2 = interpts.map(p => target.getparamatpoint(p)).sort((a, b) => a - b); let cus1: array= source.getsplitcurves(pars1); cus1.foreach(pl => { if (istargetcurinsourcecur(target, pl)) { intersectionlist.push(pl); } else { sublist.push(pl); unionlist.push(pl); } }) let cus2: array = target.getsplitcurves(pars2); cus2.foreach(pl => { if (istargetcurinsourcecur(source, pl)) { intersectionlist.push(pl); sublist.push(pl); } else { unionlist.push(pl); } }) } else { if (iscontainer) { if (sourcecontainertarget) { intersectionlist.push(target); sublist.push(source, target); unionlist.push(source); } else { unionlist.push(target); intersectionlist.push(source); } } else { unionlist.push(source, target) sublist.push(source); } } return { intersectionlist, unionlist, sublist } }
由于一些曲线类实现方法不一,这里主要说一些实现布尔运算的思路
首先,得判断2封闭曲线是否是被包含的关系
然后,获取2封闭曲线的所有交点,这里交点可能是圆和线,线和线,圆和圆的,求交点的方法网上应该很多,以后有时间也会写写用javascript实现方式
然后根据所有的交点把2封闭曲线分割为多个部分
最后,对分割后的线段进行整理,其中相交部分是曲线在对方曲线内部的部分,合并是互不在对方曲线内部的部分,相减类似不想说了,具体看代码,如果是被包含状态则更加就简单了
上一篇: Spring MVC之表单验证
推荐阅读
-
JavaScript mixin实现多继承的方法详解
-
JavaScript多段线实现布尔运算的方法
-
JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】
-
JavaScript mixin实现多继承的方法详解
-
javascript实现根据时间段显示问候语的方法
-
js实现表单多按钮提交action的处理方法_javascript技巧
-
用js实现多域名不同文件的调用方法_javascript技巧
-
JavaScript多段线实现布尔运算的方法
-
javascript实现根据时间段显示问候语的方法_javascript技巧
-
js实现表单多按钮提交action的处理方法_javascript技巧