JSXGraph:点之间的距离未更新

问题描述 投票:0回答:1

简短版本 如何输入半径为三个可移动点之间距离的函数的圆?例如:

board.create('circle',[A,A.Dist(B)+A.Dist(C)]);

随着点的移动,中心发生变化,但半径保持不变。


更长的版本我正在尝试编写一个函数来计算从外部点到椭圆的切线,使用

给出的构造

http://whistleralley.com/conics/conic_construction/tangent_to_conic/

除此之外,这需要我生成一个以焦点为中心的圆,其半径等于椭圆的长轴。这是我到目前为止所拥有的(部分):

 var f1 = board.create('point',[4,0],{name:f1});
 var f2 = board.create('point',[-4,0],{name:f2});
 var A = board.create('point',[0,3]);              
 var ell = board.create('ellipse',[f1,f2,A]);

 var P = board.create('point',[-6,6]);
 var c2 = board.create('circle',[f2, A.Dist(f1)+A.Dist(f2)]);

在我开始移动点之前,这一切都很好 - 如果定义椭圆的初始点发生变化,圆的半径不会改变。无论该点移动到哪里,它的中心都会跟随 f2,但半径不会改变。显然这是因为半径需要定义为函数。但如何呢?例如,这不起作用:

var c2 = board.create('circle',[f2, function(f1,f2,A){return A.Dist(f1)+A.Dist(f2)}]);

这会引发类型错误(在控制台中):“TypeError:无法读取未定义的属性(读取“Dist”)”。

可以使用滑块给出的参数手动编写椭圆函数(使用

curve
)。但这似乎有点矫枉过正,因为已经有了椭圆函数。

我还可以写三个监听函数:

A.on('drag', ()=> {   });
f1.on('drag', ()=> {   });
f2.on('drag', ()=> {   });

每当这些点之一移动时,它就会更新半径。但同样,这似乎有点矫枉过正。

我最好的选择是什么?非常感谢!

function distance jsxgraph
1个回答
0
投票

在你的第一次尝试中

var c2 = board.create('circle',[f2, A.Dist(f1)+A.Dist(f2)]);

圆的半径

c2
设置为静态值
A.Dist(f1)+A.Dist(f2)
,该值在执行
board.create('circle',...)
时进行评估。 为了使半径动态化,一个简单的方法必须提供一个返回该值的函数,例如

var c2 = board.create('circle',[f2, () => A.Dist(f1)+A.Dist(f2)]);

然后在每次更新棋盘时评估距离。 这是完整的代码(另外点名称是字符串):

 var f1 = board.create('point',[4,0],{name:'f1'});
 var f2 = board.create('point',[-4,0],{name:'f2'});
 var A = board.create('point',[0,3], {name: 'A'});              
 var ell = board.create('ellipse',[f1,f2,A]);

 var P = board.create('point',[-6,6], {name: 'P'});
 var c2 = board.create('circle',[f2, () => A.Dist(f1)+A.Dist(f2)]);

观看直播https://jsfiddle.net/p8suedgt/

© www.soinside.com 2019 - 2024. All rights reserved.