jsxgraph: исчезает пересечение между functiongraph и линией

Я определил пересечение между функциональным графиком и прямой линией в JSXGraph. Когда я двигаю прямую линию, пересечение обновляет свою позицию, как и ожидалось. Но когда я перемещаю функциональный график, пересечение исчезает. Нужно ли здесь делать какие-то особые настройки? Это ошибка с jsxgraph? Вот живая иллюстрация проблемы:

http://maldive.ccnmtl.columbia.edu/js/functiongraph-intersection.html

И вот код:

var l1 = board.create('line', [                                                                                                     
    [2.5, 2.5],                                                                                                                     
    [3.5, 3.5]                                                                                                                      
], {                                                                                                                                
    name: 'line 1',                                                                                                                 
    withLabel: true,                                                                                                                
    label: { position: 'rt', offset: [10, -20] },                                                                                   
    strokeColor: 'blue',                                                                                                            
    strokeWidth: 2,                                                                                                                 
    fixed: false                                                                                                                    
});                                                                                                                                 

var f = function(x) {                                                                                                               
    var alpha = 0.3;                                                                                                                
    return (1 - alpha) *                                                                                                            
        (1.4 *                                                                                                                      
         1.6 ** alpha) *                                                                                                            
        (x ** -alpha);                                                                                                              
};                                                                                                                                  

var l2 = board.create('functiongraph', [f], {                                                                                       
    name: 'line 2',                                                                                                                 
    withLabel: true,                                                                                                                
    strokeWidth: 2,                                                                                                                 
    strokeColor: 'orange',                                                                                                          
    fixed: false                                                                                                                    
});                                                                                                                                 

var i = board.create('intersection', [l1, l2, 0], {                                                                                 
    name: 'intersection',                                                                                                           
    fixed: true,                                                                                                                    
    showInfobox: false                                                                                                              
}); 

1 ответ

Решение

Да, действительно, это ошибка в JSXGraph. В версии 0.99.6 и ранее пересечение между линией и непрерывной кривой определяется алгоритмом поиска корня. Теперь проблема заключается в том, что перетаскивание кривой осуществляется путем применения преобразования к точкам кривой (которые являются выходными данными алгоритма построения графика). Это преобразование не учитывается в алгоритме поиска корня, поскольку вместо него используется функциональный термин.

Напротив, пересечение между двумя кривыми определяется с использованием точек, которые являются выходными данными алгоритма построения кривой. Здесь преобразование уже применено. Вот почему пересечения работают для кривой y = x,

Источники теперь содержат исправление ошибки, которое будет доступно в сегодняшней ночной сборке. Отныне пересечение между линиями и кривыми осуществляется так же, как для пересечений кривых / кривых. Будет небольшая потеря в точности, но это не будет видно.

Спасибо за указание на это!

Другие вопросы по тегам