JOURFIXE

It is currently Sun Aug 01, 2021 8:36 pm

All times are UTC - 8 hours [ DST ]




Post new topic Reply to topic  [ 27 posts ]  Go to page Previous  1, 2, 3
Author Message
 Post subject: Re: Need help! Ой как NEED HELP!
PostPosted: Fri Nov 01, 2019 2:46 pm 
Offline
User avatar

Joined: Sun Sep 09, 2007 11:53 pm
Posts: 17919
Location: St.-Petersburg, Russia
It was originally called Mocha... :mrgreen:

_________________
Кот домашний средней пушистости


Top
 Profile  
 
 Post subject: Re: Need help! Ой как NEED HELP!
PostPosted: Fri Nov 01, 2019 2:57 pm 
Offline

Joined: Fri Sep 07, 2007 11:39 am
Posts: 6724
Domnitch wrote:
It was originally called Mocha... :mrgreen:
lol. Натюрлих. Хотя произносится оно "Мока", но да.

_________________
Пух. Винни Пух.


Top
 Profile  
 
 Post subject: Re: Need help! Ой как NEED HELP!
PostPosted: Sun Nov 03, 2019 1:21 pm 
Offline
User avatar

Joined: Thu Sep 06, 2007 12:20 am
Posts: 17896
Location: Шоам, Израиль
jourfixe wrote:
> Можно я иногда буду в эту ветку глупые вопросы задавать?
Да ради Будды :)
Ок.

Один глюпый вопрос есть сразу же. Даже не один, как выясняется. Миша Домнич, спрашиваю и тебя тож. :rose:

jourfixe wrote:
Зы. Вообще, это порочная практика - писать функции так, что вместо входных параметров они используют глобальные переменные. Функция по возможности должна быть независима от глобального состояния. "Чистая" функция при одних и тех же входных параметрах выдаёт один и тот же результат (в определение "чистой" функции входит ещё и отсутствие побочных эффектов, но это отдельная тема).


У меня есть два графических бокса (на самом деле, я хочу больше, но если заработает с двумя - заработает и с пятью).

И я хочу, чтобы когда я тащу точку на одном графике - на втором оно тоже менялось в соответствии.
По минимуму один - родитель, второй - только отвечает.

С полгода назад я пыталась понять, как это сделать по примерам в гугле, но обломалась.
И вот недели полторы назад я ВНЕЗАПНО обнаруживаю, что вот таким макаром я вообще осуществляю кросс-опыление. Тянем за первый - меняется второй, тянем за второй - меняется первый.

(формулы, как они связаны, конечно, сложнее, чем тупое копирование, но не суть).

<jsxgraph width="400" height="600" box="box1">
var board1 = JXG.JSXGraph.initBoard('box1', {boundingbox: [-1.,20.,7.,-2.], axis:true,grid:true,showCopyright:false, showNavigation:false});

var InitX = 3.;
var InitY = 2.;
var p1 = board1.create('point', [InitX , InitY]);
p1.on('drag', Move1);

</jsxgraph>

<jsxgraph width="400" height="600" box="box2">
var board2 = JXG.JSXGraph.initBoard('box2', {boundingbox: [-1.,20.,7.,-2.], axis:true,grid:true,showCopyright:false, showNavigation:false});

var InitX = 3.;
var InitY = 2.;
var p2 = board2.create('point', [InitX , InitY]);

function Move1(){
XNew = p1.X();
YNew = p1.Y();
p2.moveTo([XNew,YNew]);
}

function Move2(){
XNew = p2.X();
YNew = p2.Y();
p1.moveTo([XNew,YNew]);
}
p2.on('drag', Move2);

</jsxgraph>
Причем, заметь иезуитскую хитровыделанность: функцию на драг разных точек я приписываю им в их собственных боардах, а вот сами функции прописываю в самом последнем, когда остальные уже существуют. Получилось случайно - но оно работало!
Кароч, именно в тот момент я словила драйв и наваляла больше тысячи строк кода (тысячу в одном плюс незаконченный второй прымер.

А потом - дрым-с!!! Сначала упала вся мудля, весь сайт не работал. Потом заработал, но без графики. А потом графика вернулась, но перекрестное опыление уже не работает.

Первый вопрос.
Я уже поняла, что, видимо, так делать нехорошо. А как нада? Если, канешн, это не слишком сложно и долго писать.


Хуже того - перестали работать работавшие до того довольно простые примеры с одним окном, где, например, функции были присвоены кнопочкам. Функции, вестимо, меняли экран через глобальные переменные, которые были определены в теле главной программы. (Если я вообще правильно употребляю понятие глобальной переменной - кароч, внутри соответствующего <jsxgraph> до того, как встретится </jsxgraph>). В общем, я смотрела примеры в гугле и мараковала и пробовала. Полгода всё работало в лучшем виде, у меня было куча работающих примерчиков. Которые, повторюсь, более не работают.

var button = board1.create('button', [5.,18., 'Start again', StartAgain], {});
function StartAgain(){
p1.moveTo([InitX , InitY]);
}

Второй вопрос.
С кнопочными функциями я тоже накосячила? Так совсем нельзя?


***********************************

Ну и последний вопрос.
Я по твоему наставлению одолела функцию вычисления высоты при падении с заданными параметрами начальной высоты, скорости и ускорения. Определяю ее до того, как создаю боард вот так.

<jsxgraph width="400" height="600" box="box1">
function fall(){
return arguments[1] + arguments[2]*arguments[0]+0.5*arguments[3].*arguments[0]*arguments[0];
}
var board1 = JXG.JSXGraph.initBoard('box1', {boundingbox: [-1.,20.,7.,-2.], axis:true,grid:true,showCopyright:false, showNavigation:false});

time = 3.;
Y0 = 10.;
V0 = 2.;
Accel = -10.;
var yt = board1.create('point', [time , function() {return fall(time , Y0 , V0 , Accel);}]);

Третий вопрос.
Я могу сделать, чтобы из board2 я тоже могла вызывать ту же самую функцию. Потому что сейчас она ее не считает. Только если я ее второй раз пропишу под конструктором второго боарда.

<jsxgraph width="400" height="600" box="box2">
function fall(){
return arguments[1] + arguments[2]*arguments[0]+0.5*arguments[3].*arguments[0]*arguments[0];
}
var board2 = JXG.JSXGraph.initBoard('box2', {boundingbox: [-1.,20.,7.,-2.], axis:true,grid:true,showCopyright:false, showNavigation:false});

Я как-то смутно подозреваю, что это неправильно. :mrgreen:
Но мозгов, понять как нада - не хватает. :bang:


Я, канешн, не ожидаю, что вы с Домничем кинетесь писать мне код.

По минимуму мне хватит общефилософского объяснения, что и где определяется. Додумывать у меня еще иногда получается.

Но если паче чаяния вы знаете сразу ответ, как надо писать какой-то из трех вопросов (или сразу три?!) - вы меня просто осчастливите.

ЗЫ. Пожалуй, наиважнейший вопрос - четвертый.

Не могла ли я лично уронить общеизраильскую мудлю этими своими экспериментами? Потому что я надеюсь в ближайщие дни добраться до программистов, которые эту систему держат и программируют, и не хотелось бы получить тумаков. Если что - буду заметать следы. :lol:


Top
 Profile  
 
 Post subject: Re: Need help! Ой как NEED HELP!
PostPosted: Sun Nov 03, 2019 10:25 pm 
Offline

Joined: Fri Sep 07, 2007 11:39 am
Posts: 6724
> Alona

Оговорка: я давно не занимался веб-программированием вообще и джаваскриптом в частности, пишу по воспоминаниям.

4 вопрос: сильно сомневаюсь

Остальные:
> Причем, заметь иезуитскую хитровыделанность: функцию на драг разных точек я приписываю им в их собственных боардах, а вот сами функции прописываю в самом последнем, когда остальные уже существуют. Получилось случайно - но оно работало!

Я не уверен, что такой подход гарантирует порядок выполнения (а важен именно порядок, чтобы элементы страницы были определены раньше, чем код, который ими пользуется, приписывать функцию на драг в том же месте, где определен боард необязательно). Кто его знает, как твой браузер параллелизирует загрузку страницы. Симптом "то работает, то не работает" какбэ намекает.

Создай ещё одну функцию, перенеси в неё весь свой код, и вызови её в ответ на событие "window.onload" Или даже не создавай новое имя, а перенеси прямо в триггерную функцию, вроде такого:

window.onload = function(e){
// all other code goes here including Move1 and Move2
}

Т.е. код выполнится только после загрузки страницы, в заданном порядке и когда имена элементов уже определены.

_________________
Пух. Винни Пух.


Top
 Profile  
 
 Post subject: Re: Need help! Ой как NEED HELP!
PostPosted: Mon Nov 04, 2019 6:00 am 
Offline
User avatar

Joined: Thu Sep 06, 2007 12:20 am
Posts: 17896
Location: Шоам, Израиль
jourfixe wrote:
> Alona

Оговорка: я давно не занимался веб-программированием вообще и джаваскриптом в частности, пишу по воспоминаниям.

4 вопрос: сильно сомневаюсь

Остальные:
> Причем, заметь иезуитскую хитровыделанность: функцию на драг разных точек я приписываю им в их собственных боардах, а вот сами функции прописываю в самом последнем, когда остальные уже существуют. Получилось случайно - но оно работало!

Я не уверен, что такой подход гарантирует порядок выполнения (а важен именно порядок, чтобы элементы страницы были определены раньше, чем код, который ими пользуется, приписывать функцию на драг в том же месте, где определен боард необязательно). Кто его знает, как твой браузер параллелизирует загрузку страницы. Симптом "то работает, то не работает" какбэ намекает.

Создай ещё одну функцию, перенеси в неё весь свой код, и вызови её в ответ на событие "window.onload" Или даже не создавай новое имя, а перенеси прямо в триггерную функцию, вроде такого:

window.onload = function(e){
// all other code goes here including Move1 and Move2
}

Т.е. код выполнится только после загрузки страницы, в заданном порядке и когда имена элементов уже определены.
Каждое слово и даже каждая буква стоят золотого. Наводят порядок в башке, потому что дошла до уровня, когда на ощупь получается плохо.

Беда в том, что я же работаю из под мудли. Которая добавляет свой код, которого я даже не вижу.
С практической точки зрения window.onload = function(e){ создать не могу, мудля эту строку вспринимает как текст и выводит вверху страницы с вопросом.

Но понимать, что спрашивать у программеров - понимаю всё луччше.

Неразъясненной для меня осталась сова с функциями, которыми я обновляю экран. Одно окно, и всю трихомундию я получаю из главной процедуры, а не как параметры функции. Имена точек, линии, все, что надо проверить и\или обновить.
Так можно?

И еще. Если я одну и ту же функцию цепляю на несколько элементов: обновить графику, если потащила любую из двух точек, или вообще любую из точек массива(группы).

p1.on('drag', UpdateGraph);
p2.on('drag', UpdateGraph);
p3.on('drag', UpdateGraph);

Я могу при вызове функции таким макаром поймать, кто ее вызвал?

:rose: :rose: :rose: :rose: :rose: :rose:


Top
 Profile  
 
 Post subject: Re: Need help! Ой как NEED HELP!
PostPosted: Mon Nov 04, 2019 8:28 am 
Offline

Joined: Fri Sep 07, 2007 11:39 am
Posts: 6724
Alona wrote:
С практической точки зрения window.onload = function(e){ создать не могу, мудля эту строку вспринимает как текст и выводит вверху страницы с вопросом.
Окружи его тэгами <script language="javascript">...</script>
Alona wrote:
Я могу при вызове функции таким макаром поймать, кто ее вызвал?
Да, можешь. В функцию поступает аргумент е (event), который ты пока что игнорируешь и не прописываешь. У event-а в свою очередь есть параметр (вроде source, надо пробовать/дебагать), который и содержит "источник" - элемент, действие над которым стало триггером.

P.S. погуглил - не "source", наоборот, "target". Имеет смысл. А кнопкам надо дать имена, чтоб было понятно кто есть кто.

_________________
Пух. Винни Пух.


Top
 Profile  
 
 Post subject: Re: Need help! Ой как NEED HELP!
PostPosted: Tue Nov 05, 2019 6:42 am 
Offline
User avatar

Joined: Sun Sep 09, 2007 11:53 pm
Posts: 17919
Location: St.-Petersburg, Russia
Мне кажется крайне подозрительным, что в одном jsxgraph определяются функции для другого.
В нормальном языке это должно было бы вызвать проблемы из-за области видимости.

Больше пока сказать ничего не могу - я с жабаскриптом дела не имел от слова вообще.

_________________
Кот домашний средней пушистости


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 27 posts ]  Go to page Previous  1, 2, 3

All times are UTC - 8 hours [ DST ]


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group