mirror of https://gitee.com/cf-fz/WebCAD.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.8 KiB
136 lines
3.8 KiB
import { Vector3 } from 'three';
|
|
import { Circle } from '../../src/DatabaseServices/Entity/Circle';
|
|
import { equaln, equalv3 } from '../../src/Geometry/GeUtils';
|
|
|
|
test('圆参数', () =>
|
|
{
|
|
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
|
|
circle.GetParamAtPoint(new Vector3(0, 0, 0));/*?*/
|
|
expect(equaln(circle.GetParamAtPoint(new Vector3(0, 0, 0))/*?*/, 0.5)).toBeTruthy();
|
|
|
|
expect(equaln(circle.GetParamAtPoint(new Vector3(5, 5, 0)), 0.25)).toBeTruthy();
|
|
|
|
expect(equaln(circle.GetParamAtPoint(new Vector3(10, 0, 0)), 0)).toBeTruthy();
|
|
|
|
expect(circle.GetParamAtPoint(new Vector3(-5, -5, 0))).toBe(NaN);
|
|
|
|
expect(circle.GetParamAtPoint(new Vector3(10, 0, 0))).toBe(0);
|
|
|
|
});
|
|
|
|
test('半径为0的圆,参数', () =>
|
|
{
|
|
|
|
let circle = new Circle(new Vector3(), 0);
|
|
|
|
expect(circle.GetParamAtPoint(new Vector3(0, 0, 0))).toBe(0);
|
|
|
|
});
|
|
|
|
test("圆的切割1", () =>
|
|
{
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
let cs = circle.GetSplitCurves(0.5);
|
|
expect(cs.length).toBe(0);
|
|
});
|
|
|
|
test("圆的切割2", () =>
|
|
{
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
|
|
let cs = circle.GetSplitCurves([0.5, 0.75, 0.25]);
|
|
|
|
for (let c of cs)
|
|
{
|
|
expect(c.StartPoint).toMatchSnapshot();
|
|
expect(c.EndPoint).toMatchSnapshot();
|
|
}
|
|
});
|
|
|
|
test("由距离得到圆参数", () =>
|
|
{
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
expect(equaln(circle.GetParamAtDist(0.5 * Math.PI * 5), 0.25)).toBeTruthy();
|
|
}
|
|
);
|
|
test("由距离得到对应点", () =>
|
|
{
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
expect(equalv3(circle.GetPointAtDistance(0.5 * Math.PI * 5), new Vector3(5, 5, 0))).toBeTruthy();
|
|
}
|
|
);
|
|
|
|
test("由参数得到距离", () =>
|
|
{
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
expect(equaln(circle.GetDistAtParam(0.5), Math.PI * 5)).toBeTruthy();
|
|
}
|
|
);
|
|
test("由点得到距离", () =>
|
|
{
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
expect(equaln(circle.GetDistAtPoint(new Vector3(5, 5, 0)), 0.5 * Math.PI * 5)).toBeTruthy();
|
|
expect(circle.GetDistAtPoint(new Vector3(10, 0, 0))).toBe(0);
|
|
}
|
|
);
|
|
|
|
test('圆偏移', () =>
|
|
{
|
|
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
let arcs3 = circle.GetOffsetCurves(10);
|
|
let arcs = circle.GetOffsetCurves(-3);
|
|
|
|
arcs3[0].StartPoint; //?
|
|
arcs3[0].EndPoint; //?
|
|
|
|
arcs[0].StartPoint; //?
|
|
arcs[0].EndPoint; //?
|
|
// expect(arcs.length).toBe(1);
|
|
// expect(arcs.length).toBe(Math.PI * 2);
|
|
|
|
let newArc = arcs[0];
|
|
expect(newArc.StartPoint).toMatchSnapshot();
|
|
expect(newArc.EndPoint).toMatchSnapshot();
|
|
|
|
let circle2 = new Circle(new Vector3(10, 0, 0), 10);
|
|
let circles2 = circle2.GetOffsetCurves(-5)[0]; //?
|
|
circles2.StartPoint; //?
|
|
circles2.EndPoint; //?
|
|
expect(circles2.StartPoint).toMatchSnapshot();
|
|
expect(circles2.EndPoint).toMatchSnapshot();
|
|
|
|
circles2 = circle2.GetOffsetCurves(10)[0]; //?
|
|
circles2.StartPoint; //?
|
|
circles2.EndPoint; //?
|
|
expect(circles2.StartPoint).toMatchSnapshot();
|
|
expect(circles2.EndPoint).toMatchSnapshot();
|
|
|
|
expect(circles2.StartPoint).toMatchSnapshot();
|
|
expect(circles2.EndPoint).toMatchSnapshot();
|
|
circles2 = circle2.GetOffsetCurves(-5)[0]; //?
|
|
circles2.StartPoint; //?
|
|
circles2.EndPoint; //?
|
|
expect(circles2.StartPoint).toMatchSnapshot();
|
|
expect(circles2.EndPoint).toMatchSnapshot();
|
|
});
|
|
|
|
test('最近点', () =>
|
|
{
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
|
|
expect(circle.GetClosestPointTo(new Vector3(-5, 0, 0), true)/*?*/).toMatchSnapshot();//0,0,0.
|
|
expect(circle.GetClosestPointTo(new Vector3(8, 0, 0), true)/*?*/).toMatchSnapshot();//10,0,0.
|
|
|
|
});
|
|
|
|
|
|
test('最近点2', () =>
|
|
{
|
|
let circle = new Circle(new Vector3(5, 0, 0), 5);
|
|
let pt = circle.GetClosestPointTo(new Vector3(5), true);
|
|
expect(pt).toMatchSnapshot();
|
|
});
|