Math 在Three.js中的两点之间绘制椭圆弧
我一直试图在两个任意点之间绘制一条椭圆弧,但我的实现在某些情况下不起作用 因为这其中有一部分涉及到数学,所以我从提问开始。 基本上,给定两个点和中心,如果允许旋转,总是可以得到一个椭圆,但点共线的情况除外 对这一问题提出的解决办法是:Math 在Three.js中的两点之间绘制椭圆弧,math,three.js,ellipse,Math,Three.js,Ellipse,我一直试图在两个任意点之间绘制一条椭圆弧,但我的实现在某些情况下不起作用 因为这其中有一部分涉及到数学,所以我从提问开始。 基本上,给定两个点和中心,如果允许旋转,总是可以得到一个椭圆,但点共线的情况除外 对这一问题提出的解决办法是: 将中心平移到原点,将两个点平移到同一矢量 通过角度-alpha旋转两个点,该角度是最大向量与正x半轴的角度的simmetric 求解椭圆方程以找到其半径(由两个方程和两个未知数组成的系统) 定义椭圆 以角度alpha向后旋转椭圆,并平移回其中心 但是,我在Thre
-alpha
旋转两个点,该角度是最大向量与正x半轴的角度的simmetricalpha
向后旋转椭圆,并平移回其中心此示例尝试从原始形状中的顶点和修改形状中的相同顶点创建圆弧。
关于椭圆弧的代码位于类
EllipseArc
下,您可以在第190行中处理应用于对象的变换
它适用于某些情况:但并非全部:
只是一个从头开始的想法,而不是最终的解决方案 克隆和平移对象时,要在两个各自的点之间构建圆弧,需要它们在世界坐标系中的坐标,以及对象质心之间中点的坐标
var scene=new THREE.scene();
var摄像机=新的三视角摄像机(60,内宽/内高,11000);
摄像机位置设置(0,0,150);
var renderer=new THREE.WebGLRenderer();
设置大小(innerWidth,innerHeight);
document.body.appendChild(renderer.doElement);
var controls=新的三个.OrbitControls(摄影机、渲染器.doElement);
var shapeGeom=new THREE.ShapeBufferGeometry(new THREE.Shape(californiaPts));
shapeGeom.center();
形状基元比例(0.1,0.1,0.1);
var shapeMat=新的三网格基本材质({
颜色:“橙色”
});
var shape=新的三点网格(shapeGeom、shapeMat);
shape.updateMatrixWorld();
场景。添加(形状);
var shapeClone=shape.clone();
shapeClone.position.set(25,25,0);
shapeClone.UpdateMatrix()文件;
场景。添加(shapeClone);
var center=new THREE.Vector3().lerpVectors(shapeClone.position,shape.position,0.5);
var vecStart=new THREE.Vector3();
var vecEnd=new THREE.Vector3();
var pos=shapeGeom.getAttribute(“位置”);
for(设i=0;i
正文{
溢出:隐藏;
保证金:0;
}
变量californiaPts=[
新三矢量2(610320),
新的三个矢量2(450300),
新的三个矢量2(392392),
新的三个矢量2(266438),
新的三个矢量2(190570),
新的三个矢量2(190600),
新的三个矢量2(160620),
新的三个矢量2(160650),
新的三个矢量2(180640),
新的三个矢量2(165680),
新的三个矢量2(150670),
新的三个矢量2(90737),
新的三个矢量2(80795),
新的三个矢量2(50835),
新的三个矢量2(64870),
新的三个矢量2(60945),
新三个矢量2(300945),
新的三个矢量2(300743),
新的三个矢量2(600473),
新的三个矢量2(626425),
新的三个矢量2(600370),
新三个矢量2(610320)
];
在坏情况下会发生什么?计算出错误的椭圆?正确的椭圆但错误的圆弧?我不会依赖EllipseCurve
@prisoner849我不知道没有它该怎么办。相关?-非常感谢你的所有工作!我还没有测试过它,但在你的示例中它似乎工作得很好。我一直在尝试将你的代码融入我的e但我没有取得任何成功。我基本上已经在世界空间工作了