Как суммировать два Maxima / LISP-списка поэлементно, чтобы использовать их в JSX-графе, встроенном в STACK-экзамен Moodle? - PullRequest
0 голосов
/ 12 июня 2018

Что говорит заголовок.Я пытаюсь построить графическую задачу оптимизации с двумя переменными, которую студенты могут решить, используя STACK-type Moodle-question , который использует Maxima в качестве бэкэнда для работы с математикой.,Я пробовал следующее:

/*Constants*/
c1 : rand_with_step(0,15,0.1);
c2 : c1 + 2;
c3 : c1 + 1;
c4 : c1;

/*Solutions*/
OptimiPa : [c3,c1];
za : -1 * OptimiPa[1] + 2 * OptimiPa[2];

OptimiPb : [c3 + 1/2,c3 - 1/2];
zb : 2 * OptimiPb[1] + OptimiPb[2];

OptimiPc : [c1,c1];
zc : OptimiPc[1]  + 3 * OptimiPc[2] 

OptimiPd : [];
zd : inf;

/*Variables for drawing*/
a : 1000000;
b : a - 1;

/*Variables for drawing lines*/
OptimiPa2 : OptimiPa + [1,0.5];

Это, однако, не дает желаемого результата при подключении к JSXgraph:

<jsxgraph style="width=500em;height=500em"; box="uniqueName">(function() {

var board = JXG.JSXGraph.initBoard('uniqueName', {boundingbox:['{#c3-5#}','{#c2+2#}','{#c3+3#}', '{#c1-2#}'], keepaspectratio: true,zoom:false});

/*Axes*/
var axis1 = board.create('axis', [['{#c3-5#}','{#c1#}'], ['{#c3+3#}', '{#c1#}']]);
var axis2 = board.create('axis', [['{#c1#}','{#c1-5#}'], ['{#c1#}', '{#c2+3#}']]);

/*Polygon angles*/
var k1 = board.create('point', ['{#c3#}','{#c1#}'],{visible:false});
var k2 = board.create('point', ['{#c1#}','{#c1#}'],{visible:false});
var k3 = board.create('point', ['{#c1-a#}','{#-(-c1-a)#}'],{visible:false});
var k4 = board.create('point', ['{#c1-b#}','{#2 - (-c1 - b)#}'],{visible:false});
var k5 = board.create('point', ['{#c1+3/2#}','{#(c1 + 3/2) - 1#}'],{visible:false});

/*Optimization area as a polygon*/
var optAl = board.create('polygon',[k1,k2,k3,k4,k5],{borders: {visible: true},vertices: {visible: false}});


/*Points for drawing lines*/
var pa1 = board.create('point', '{#OptimiPa#}',{visible:false});
var pa2 = board.create('point', '{#OptPa2#}',{visible:false});

/*Lines*/
var suoraA = board.create('line',[pa1,pa2]);

})();
</jsxgraph>

Что я здесь не так делаю?Остальная часть изображения выглядит просто отлично, но линия suoraA не появляется внутри рисунка.

РЕДАКТИРОВАТЬ: Исправлен код в соответствии с точками @ jkiiski, но проблема все еще сохраняется.Посмотрите ниже для частичного ответа.

1 Ответ

0 голосов
/ 12 июня 2018

Хорошо, поэтому замечания, высказанные @jkiiski, были частью проблемы, но теперь я выяснил, в чем проблема.Переменная OptimiPa2 является списком, и, очевидно, STACK по какой-то причине не любит прямой доступ к переменным list с использованием синтаксиса '{#variable_name#}', хотя это должно работать.Что исправило проблему для меня, так это вручную получить доступ и ввести элементы списка в новый список, который я затем дал в качестве аргумента point "конструктору":

/*Pisteitä suoria varten*/
var pa1 = board.create('point', ['{#OptimiPa[1]#}','{#OptimiPa[2]#}'],{visible:true});
var pa2 = board.create('point', ['{#OptmiPa2[1]#}','{#OptmiPa2[2]#}'],{visible:true});

/*Suoria*/
var suoraA = board.create('line',[pa1,pa2]);

Это дало мне следующееimage:

Optimization area with the desired line.

Это то, чего я хотел достичь, хотя я хотел бы, чтобы было проще вводить списки в качестве аргументов JSXGraph.С другой стороны, я могу просто сделать это неправильно.

РЕДАКТИРОВАТЬ: Ссылки на списки, как @jkiiski, предложенный в комментариях, делают свое дело, хотя я клянусь, что пробовал это раньше, и это не сработало.

...