Возможные проблемы с созданием объединения нескольких кривых. ⇐ Javascript
-
Гость
Возможные проблемы с созданием объединения нескольких кривых.
У меня возникла проблема с использованием Curveunion для объединения кривых в один объект. Вот ссылка на мою проблему:
https://jsfiddle.net/aaronamran/nskuy632/4/
Вот код класса луча:
луч класса { конструктор (данные) { if (typeof(data[data.length-1]) == 'строка') {this.state = data.pop()} еще {this.state = "ПОКАЗАТЬ"} this.d = data.slice(0); //сделать копию this.r = data.pop(); // радиус данные.сдвиг(); // удаляем строку типа if (typeof data[1] === 'строка') { this.col = [data.shift(),data.shift()]; //удаляем атрибуты fillcolor иgradientcolor в массив } еще { this.col = ['светло-серый', 'светло-серый']; данные.сдвиг(); // удаляем имя и используем единый цвет по умолчанию } this.p = данные; // конечные точки центральной линии // цикл по парам точек this.angle = -Math.atan2(this.p\[1\]\[1\]-this.p\[0\]\[1\],this.p\[1\]\[0\] -this.p\[0\]\ [0\])+90\*deg2rad; this.attr = {opacity: true, Layer:defaultMecLayer, fillcolor:this.col\[0\], градиент: 'линейный', градиентSecondColor:this.col\[1\], градиентАнгле:this.angle, hasInnerPoints:true, ...normalStyle}; this.b = board.create('curve', \[\[\],\[\]\], {...normalStyle, hasInnerPoints:true}); пусть лучи = \[\],pointsArray = \[\], pointNameArray = \[\], лучUnions = \[\]; пусть x, y, dx, dy, l, c; console.log('this.p.length находится здесь: ' + this.p.length); // имена переменных играют большую роль, они должны быть разными на каждой итерации, чтобы предотвратить переопределение // предыдущая проблема с появлением только 1 луча связана с перезаписью переменных // нужно использовать IIFE и объяснить почему // Инициализируем массивы для хранения значений функций var xArray = [], yArray = [], dxArray = [], dyArray = [], lArray = [], cArray = []; for (пусть i = 0; i \< this.p.length; i+=2) { (функция () { var pointName1 = `p${i+1}`, pointName2 = `p${i+2}`, BeamName1 = `b${i+1}`; pointNameArray.push(pointName1); pointNameArray.push(pointName2); this\[pointName1\] = board.create('point', this.p\[i\], {visible:true, fixed:false, name:pointName1}); this\[pointName2\] = board.create('point', this.p\[i+1\], {visible:true, fixed:false, name:pointName2}); pointsArray.push(this\[pointName1\]); PointsArray.push(this\[pointName2\]); // Сохраняем значения функции в массивах xArray = () => this[pointName1].X(); yArray = () => this[pointName1].Y(); dxArray = () => this[pointName2].X() - this[pointName1].X(); dyArray = () => this[pointName2].Y() - this[pointName1].Y(); lArray = () => Math.sqrt(dxArray()**2 + dyArray()**2); cArray = () => this.r/lArray(); var bneu = board.create('curve', [[],[]], {strokeWidth:0, hasInnerPoints:true}); bneu.updateDataArray = функция () { this.dataX = [xArray()+dyArray[i]()*cArray[i](), xArray[i]()+dxArray[i]()+dyArray[i]()*cArray[i ](), xArray[i]()+dxArray[i]()-dyArray[i]()*cArray[i](), xArray[i]()-dyArray[i]()*cArray[i] (), xArray[i]()+dyArray[i]()*cArray[i]()]; this.dataY = [yArray[i]()-dxArray[i]()*cArray[i](), yArray[i]()+dyArray[i]()-dxArray[i]()*cArray[i ](), yArray[i]()+dyArray[i]()+dxArray[i]()*cArray[i](), yArray[i]()+dxArray[i]()*cArray[i] (), yArray[i]()-dxArray[i]()*cArray[i]()];} балки.push(бнеу); }).вызов(это); } если (this.p.length === 2) { this.b = балки[0]; this.b.setAttribute(this.attr); console.log('если условие сработало!'); } else if (this.p.length === 4) { this.b = board.create('curveunion', [beams[0], Beams[1]], this.attr); } еще { // не работает более чем для двух лучей? ,[6,5],[3,8] // CurveUnion не работает, если нет. кривых != 2, это означает, что работает только если 2 кривые одновременно // объединение предыдущего объекта кривой и нового объекта кривой работает // Шаг за шагом объединяем каждые две балки в кривое объединение for (var i = 0; i
У меня возникла проблема с использованием Curveunion для объединения кривых в один объект. Вот ссылка на мою проблему:
https://jsfiddle.net/aaronamran/nskuy632/4/
Вот код класса луча:
луч класса { конструктор (данные) { if (typeof(data[data.length-1]) == 'строка') {this.state = data.pop()} еще {this.state = "ПОКАЗАТЬ"} this.d = data.slice(0); //сделать копию this.r = data.pop(); // радиус данные.сдвиг(); // удаляем строку типа if (typeof data[1] === 'строка') { this.col = [data.shift(),data.shift()]; //удаляем атрибуты fillcolor иgradientcolor в массив } еще { this.col = ['светло-серый', 'светло-серый']; данные.сдвиг(); // удаляем имя и используем единый цвет по умолчанию } this.p = данные; // конечные точки центральной линии // цикл по парам точек this.angle = -Math.atan2(this.p\[1\]\[1\]-this.p\[0\]\[1\],this.p\[1\]\[0\] -this.p\[0\]\ [0\])+90\*deg2rad; this.attr = {opacity: true, Layer:defaultMecLayer, fillcolor:this.col\[0\], градиент: 'линейный', градиентSecondColor:this.col\[1\], градиентАнгле:this.angle, hasInnerPoints:true, ...normalStyle}; this.b = board.create('curve', \[\[\],\[\]\], {...normalStyle, hasInnerPoints:true}); пусть лучи = \[\],pointsArray = \[\], pointNameArray = \[\], лучUnions = \[\]; пусть x, y, dx, dy, l, c; console.log('this.p.length находится здесь: ' + this.p.length); // имена переменных играют большую роль, они должны быть разными на каждой итерации, чтобы предотвратить переопределение // предыдущая проблема с появлением только 1 луча связана с перезаписью переменных // нужно использовать IIFE и объяснить почему // Инициализируем массивы для хранения значений функций var xArray = [], yArray = [], dxArray = [], dyArray = [], lArray = [], cArray = []; for (пусть i = 0; i \< this.p.length; i+=2) { (функция () { var pointName1 = `p${i+1}`, pointName2 = `p${i+2}`, BeamName1 = `b${i+1}`; pointNameArray.push(pointName1); pointNameArray.push(pointName2); this\[pointName1\] = board.create('point', this.p\[i\], {visible:true, fixed:false, name:pointName1}); this\[pointName2\] = board.create('point', this.p\[i+1\], {visible:true, fixed:false, name:pointName2}); pointsArray.push(this\[pointName1\]); PointsArray.push(this\[pointName2\]); // Сохраняем значения функции в массивах xArray = () => this[pointName1].X(); yArray = () => this[pointName1].Y(); dxArray = () => this[pointName2].X() - this[pointName1].X(); dyArray = () => this[pointName2].Y() - this[pointName1].Y(); lArray = () => Math.sqrt(dxArray()**2 + dyArray()**2); cArray = () => this.r/lArray(); var bneu = board.create('curve', [[],[]], {strokeWidth:0, hasInnerPoints:true}); bneu.updateDataArray = функция () { this.dataX = [xArray()+dyArray[i]()*cArray[i](), xArray[i]()+dxArray[i]()+dyArray[i]()*cArray[i ](), xArray[i]()+dxArray[i]()-dyArray[i]()*cArray[i](), xArray[i]()-dyArray[i]()*cArray[i] (), xArray[i]()+dyArray[i]()*cArray[i]()]; this.dataY = [yArray[i]()-dxArray[i]()*cArray[i](), yArray[i]()+dyArray[i]()-dxArray[i]()*cArray[i ](), yArray[i]()+dyArray[i]()+dxArray[i]()*cArray[i](), yArray[i]()+dxArray[i]()*cArray[i] (), yArray[i]()-dxArray[i]()*cArray[i]()];} балки.push(бнеу); }).вызов(это); } если (this.p.length === 2) { this.b = балки[0]; this.b.setAttribute(this.attr); console.log('если условие сработало!'); } else if (this.p.length === 4) { this.b = board.create('curveunion', [beams[0], Beams[1]], this.attr); } еще { // не работает более чем для двух лучей? ,[6,5],[3,8] // CurveUnion не работает, если нет. кривых != 2, это означает, что работает только если 2 кривые одновременно // объединение предыдущего объекта кривой и нового объекта кривой работает // Шаг за шагом объединяем каждые две балки в кривое объединение for (var i = 0; i
Мобильная версия