mirror of https://gitee.com/cf-fz/WebCAD.git
parent
3adf1ac6c4
commit
df7c748e12
@ -0,0 +1,64 @@
|
||||
import { Segment1d } from "../../Editor/TranstrolControl/ParseWalls";
|
||||
const FUZZ = 1e-5;
|
||||
|
||||
//Segment1d列表中 合并相交的区间
|
||||
export function Segment1dJoin(segment: Segment1d[]): Segment1d[]
|
||||
{
|
||||
if (segment.length < 2)
|
||||
return segment;
|
||||
|
||||
segment.sort((a, b) => a[0] - b[0]);
|
||||
|
||||
const NewSegment: Segment1d[] = [];
|
||||
|
||||
for (let i = 0; i < segment.length; i++)
|
||||
{
|
||||
let segment1 = segment[i];
|
||||
|
||||
if (i === segment.length - 1)
|
||||
{
|
||||
NewSegment.push(segment1);
|
||||
break;
|
||||
}
|
||||
|
||||
for (let j = i + 1; j < segment.length; j++)
|
||||
{
|
||||
let segment2 = segment[j];
|
||||
if (segment2[0] < segment1[1] + FUZZ)
|
||||
segment1 = [segment1[0], Math.max(segment1[1], segment2[1])];
|
||||
else
|
||||
{
|
||||
NewSegment.push(segment1);
|
||||
break;
|
||||
}
|
||||
|
||||
if (j === segment.length - 1)
|
||||
{
|
||||
NewSegment.push(segment1);
|
||||
i = segment.length - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return NewSegment;
|
||||
}
|
||||
|
||||
//获取多个区间列表相交的部分
|
||||
export function IntersectSegment1ds(segment1: Segment1d[], segment2: Segment1d[]): Segment1d[]
|
||||
{
|
||||
const IntersectSegments: Segment1d[] = [];
|
||||
|
||||
for (let s1 of segment1)
|
||||
{
|
||||
for (let s2 of segment2)
|
||||
{
|
||||
//[1,10] + [5,15] = [5,10]
|
||||
if ((s2[0] > s1[0] - FUZZ && s2[0] < s1[1]) || (s1[0] > s2[0] - FUZZ && s1[0] < s2[1]))
|
||||
{
|
||||
IntersectSegments.push([Math.max(s1[0], s2[0]), Math.min(s1[1], s2[1])]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return IntersectSegments;
|
||||
}
|
Loading…
Reference in new issue