Форум программистов, компьютерный форум, киберфорум
Наши страницы

JavaScript

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 1, средняя оценка - 5.00
cyb0rg_01
Фрилансер
436 / 335 / 65
Регистрация: 05.05.2014
Сообщений: 2,324
12.04.2016, 18:00 #46
Получение точек пересечения прямой и окружности.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
function Point(X, Y) {
    this.X = X;
    this.Y = Y;
}
 
function Line(firstPoint, secondPoint) {
    this.firstPoint = jQuery.extend({}, firstPoint);
    this.secondPoint = jQuery.extend({}, secondPoint);
    this.k = (secondPoint.Y - firstPoint.Y) / (secondPoint.X - firstPoint.X);
    this.b = firstPoint.Y - this.k * firstPoint.X;
}
 
function Circle(centerPoint, radius) {
    this.centerPoint = jQuery.extend({}, centerPoint);
    this.radius = radius;
    this.getIntersectionPointsWithLine = function (line) {
        if (Math.abs(line.k) == Infinity) {
            var a = 1;
            var b = -2 * centerPoint.Y;
            var c = Math.pow(centerPoint.Y, 2) + Math.pow(Math.abs(line.firstPoint.X - centerPoint.X), 2) - Math.pow(radius, 2);
 
            var d = b * b - 4 * a * c;
 
            if (d > 0) {
                var y1 = (-b + Math.sqrt(d)) / (2 * a);
                var y2 = (-b - Math.sqrt(d)) / (2 * a);
                return [new Point(line.firstPoint.X, y1), new Point(line.firstPoint.X, y2)];
            }
            else if (d == 0) {
                var y = -b / (2 * a);
                return [new Point(line.firstPoint.X, y)];
            }
        }
        else if (line.k == 0)
        {
            var a = 1;
            var b = -2 * centerPoint.X;
            var c = Math.pow(centerPoint.X, 2) + Math.pow(Math.abs(line.firstPoint.Y - centerPoint.Y), 2) - Math.pow(radius, 2);
 
            var d = b * b - 4 * a * c;
 
            if (d > 0) {
                var x1 = (-b + Math.sqrt(d)) / (2 * a);
                var x2 = (-b - Math.sqrt(d)) / (2 * a);
                return [new Point(x1, line.firstPoint.Y), new Point(x2, line.firstPoint.Y)];
            }
            else if (d == 0) {
                var x = -b / (2 * a);
                return [new Point(x, line.firstPoint.Y)];
            }
        }
        else
        {
            var a = (1 + Math.pow(Math.abs(line.k), 2));
            var b = -(2 * Math.pow(centerPoint.X,2) + 2 * line.k * (line.b - centerPoint.Y));
            var c = Math.pow(centerPoint.X, 2) + Math.pow(Math.abs(line.b - centerPoint.Y), 2) - Math.pow(radius, 2);
 
            var d = b * b - 4 * a * c;
 
            if (d > 0) {
                var x1 = (-b + Math.sqrt(d)) / (2 * a);
                var x2 = (-b - Math.sqrt(d)) / (2 * a);
                var y1 = line.k * x1 + line.b;
                var y2 = line.k * x2 + line.b;
 
                return [new Point(x1, y1), new Point(x2, y2)];
            }
            else if (d == 0) {
                var x = -b / (2 * a);
                var y = line.k * x + line.b;
 
                return [new Point(x, y)];
            }
        }
        return [];
    }
}


В том коде была ошибка из-за разложении параметра прямой.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
function Point(X, Y) {
    this.X = X;
    this.Y = Y;
}
 
function Line(firstPoint, secondPoint) {
    this.firstPoint = jQuery.extend({}, firstPoint);
    this.secondPoint = jQuery.extend({}, secondPoint);
    this.k = (secondPoint.Y - firstPoint.Y) / (secondPoint.X - firstPoint.X);
    this.b = firstPoint.Y - this.k * firstPoint.X;
}
 
function Circle(centerPoint, radius) {
    this.centerPoint = jQuery.extend({}, centerPoint);
    this.radius = radius;
    this.getIntersectionPointsWithLine = function (line) {
         if (Math.abs(line.k) == Infinity) {
            var a = 1;
            var b = -2 * centerPoint.Y;
            var c = Math.pow(centerPoint.Y, 2) + Math.pow(Math.abs(line.firstPoint.X - centerPoint.X), 2) - Math.pow(radius, 2);
 
            var d = b * b - 4 * a * c;
 
            if (d > 0) {
                var y1 = (-b + Math.sqrt(d)) / (2 * a);
                var y2 = (-b - Math.sqrt(d)) / (2 * a);
                return [new Point(line.firstPoint.X, y1), new Point(line.firstPoint.X, y2)];
            }
            else if (d == 0) {
                var y = -b / (2 * a);
                return [new Point(line.firstPoint.X, y)];
            }
        }
        else if (line.k == 0) {
            var a = 1;
            var b = -2 * centerPoint.X;
            var c = Math.pow(centerPoint.X, 2) + Math.pow(Math.abs(line.firstPoint.Y - centerPoint.Y), 2) - Math.pow(radius, 2);
 
            var d = b * b - 4 * a * c;
 
            if (d > 0) {
                var x1 = (-b + Math.sqrt(d)) / (2 * a);
                var x2 = (-b - Math.sqrt(d)) / (2 * a);
                return [new Point(x1, line.firstPoint.Y), new Point(x2, line.firstPoint.Y)];
            }
            else if (d == 0) {
                var x = -b / (2 * a);
                return [new Point(x, line.firstPoint.Y)];
            }
        }
        else {
            var a = (1 + Math.pow(Math.abs(line.k), 2));
            var b = -(2 * centerPoint.X - 2 * line.k * line.b + 2 * centerPoint.Y * line.k);
            var c = Math.pow(centerPoint.X, 2) + Math.pow(Math.abs(line.b), 2) - 2 * centerPoint.Y * line.b Math.pow(centerPoint.Y, 2) - Math.pow(radius, 2);
 
            var d = b * b - 4 * a * c;
 
            if (d > 0) {
                var x1 = (-b + Math.sqrt(d)) / (2 * a);
                var x2 = (-b - Math.sqrt(d)) / (2 * a);
                var y1 = line.k * x1 + line.b;
                var y2 = line.k * x2 + line.b;
 
                return [new Point(x1, y1), new Point(x2, y2)];
            }
            else if (d == 0) {
                var x = -b / (2 * a);
                var y = line.k * x + line.b;
 
                return [new Point(x, y)];
            }
        }
        return [];
    }
}
так же можно избавиться от зависимости в виде jQuery и использовать вместо extend такую запись
Javascript
1
new Point(point.X, point.Y);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2016, 18:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Обмен готовыми решениями (JavaScript):

Обмен между фреймами - JavaScript
ситуация такова есть страница, на ней два фрейма в левом фрейме страница левого сайта с формой заполнения справа фрейм с локальной...

Как организовать обмен сообщениями - JavaScript
В общем, суть такова. Как лучше всего проверять новые записи в БД? Чат типо ICQ или как в ВК сообщениями обмениваются. Само собой...

обмен файлами без фактической передачи - JavaScript
на хосте лежит искомый файл и рассчёт числа ПИ до миллиардного знака. программа сравнивает последовательности бит файла и числа ПИ,...

Обмен данными между двумя сервисами - JavaScript
Здравствуйте. Стоит перед до мной одна задача. В системе amocrm создать виджет. Сам он пишет на JS. В нем я новичек. Цель виджета брать...

Ajax Comet, мгновенный обмен личными сообщениями - JavaScript
Всем привет,я хочу написать мгновенный обмен личными сообщениями,типо как у "Вконтакте", но не могу разобраться с ajax "comet",кто может...

Обмен готовыми решениями - Web-дизайн
Привет, мир! Предлагаю здесь обмениваться готовыми решениями, исключительно html + css. Итак, вот сверстал необычный дизайн, без...

58
sash
73 / 74 / 18
Регистрация: 09.10.2014
Сообщений: 510
09.06.2016, 15:25 #47
Мой первый jQuery-плагин https://github.com/sash003/lightBox
0
sash
73 / 74 / 18
Регистрация: 09.10.2014
Сообщений: 510
18.06.2016, 20:40 #48
Переделанный adipoli.js. Теперь можно задать свои стили картинкам (высоту, ширину). Работает во всех версиях jQuery (вроде ) Подключена лютая, бешенная jQuery 3.0.0
0
Вложения
Тип файла: rar AdipoliNorm.rar (655.9 Кб, 3 просмотров)
Padimanskas
Superposition
854 / 592 / 109
Регистрация: 27.10.2013
Сообщений: 2,060
30.06.2016, 20:47 #49
Варианты UMD от James Burke на все случаи жизни. кому-то должно пригодиться
0
cyb0rg_01
Фрилансер
436 / 335 / 65
Регистрация: 05.05.2014
Сообщений: 2,324
02.09.2016, 13:06 #50
Вращение https://jsfiddle.net/secm7gkj/1/
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function Point(x, y)
{
    this.x = x;
        this.y = y;
}
 
function RotatedRect()
{
    this.canvas = document.getElementById("c");
    this.context = this.canvas.getContext("2d");
        this.leftTopPoint = new Point(this.canvas.width / 2, this.canvas.height / 2);
        this.mousePoint = new Point(this.canvas.width / 2, this.canvas.height / 2);
        this.width = 70;
        this.height = 10;
        
        this.init();
    this.reDraw();
}
 
RotatedRect.prototype.init = function()
{   
    var self = this;
        this.canvas.addEventListener("mousemove", function(event)
        {
            self.mousePoint = self.getPointByMouse(event);
            self.reDraw();
        });
}
 
RotatedRect.prototype.reDraw = function()
{   
        this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);
 
        var angle = Math.atan2(this.mousePoint.y - this.leftTopPoint.y, this.mousePoint.x - this.leftTopPoint.x) * 180 / Math.PI;
        this.context.save();
        this.context.beginPath();
        this.context.translate(this.leftTopPoint.x, this.leftTopPoint.y);
        this.context.rotate(angle * Math.PI / 180);
        this.context.translate(-this.leftTopPoint.x, -this.leftTopPoint.y);
        this.context.rect(this.leftTopPoint.x, this.leftTopPoint.y, this.width, this.height);
        this.context.fill();
        this.context.restore();
}
 
 
RotatedRect.prototype.getPointByMouse = function(event)
{
    var rect = this.canvas.getBoundingClientRect();
        var x = (event.clientX - rect.left);
        var y = (event.clientY - rect.top);
    return new Point(x, y);
}
 
var rotatedRect = new RotatedRect();
Добавлено через 14 часов 7 минут
Синхронный вызов в отдельном потоке.
Может пригодится, в случае написания конструкций наподобие:
выстрел, столкновение, смерть (ф-ции). поверх основного потока.

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
function Synchronization()
{
    this.isFree = true;
    this.currentNumber = 0;
    this.lastNumber = 0;
}
 
Synchronization.prototype.synchronizeCall = function (handler, timeInterval, pauseInMilliseconds) {
    var self = this;
    var number = this.lastNumber++;
    var syncTimerId = setInterval(function () {
        if (self.isFree == true && number == self.currentNumber) {
            self.isFree = false;
            self.currentNumber++;
            handler();
 
            clearInterval(syncTimerId);
 
            if (pauseInMilliseconds > 0) {
                self.waitFree(pauseInMilliseconds, timeInterval);
            }
            else {
                self.isFree = true;
            }
 
        }
    }, timeInterval);
}
 
Synchronization.prototype.waitFree = function (milliseconds, timeInterval)
{
    var self = this;
    var startTime = Date.now();
    var waitTimerId = setInterval(function () {
        if (Date.now() - startTime >= milliseconds) {
            self.isFree = true;
            clearInterval(waitTimerId);
        }
    }, timeInterval);
}
гипотетическое использование (рассматривать как псевдокод).
выстрел, столкновение, смерть (ф-ции). поверх основного потока будут работать последовательно
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
function Game()
{
    this.shooterSync = new Synchronization();
    this.shooter = new Player();
    this.targetPray = new Player();
    this.graphics = new Graphics();
    this.init();
}
 
Game.prototype.init = function()
{
    var self = this;
    this.shooter.onMouseClick = function() 
    {
        self.shoot();   
        self.shock();
        self.kill();
    };
    this.graphics.init();
    this.graphics.addPlayer(this.shooter);
    this.graphics.addPlayer(this.targetPray);
}
 
Game.prototype.shoot = function()
{
    var self = this;
    var handler = function() {
        self.shooter.shoot();
    }
 
    this.shooterSync.synchronizeCall(handler, 100, 0);
}
 
Game.prototype.shock = function()
{
    var self = this;
    var handler = function() {
        self.targetPray.shock();
    }
 
    this.shooterSync.synchronizeCall(handler, 100, 0);
}
 
Game.prototype.kill = function()
{
    var self = this;
    var handler = function() {
        self.targetPray.kill();
    }
 
    this.shooterSync.synchronizeCall(handler, 100, 0);
}
0
tezaurismosis
Администратор
Эксперт .NET
6955 / 3297 / 503
Регистрация: 17.04.2012
Сообщений: 8,063
Записей в блоге: 14
28.09.2016, 18:08 #51
Ваша первая игра на JavaScript и Phaser (перевод)
0
cyb0rg_01
Фрилансер
436 / 335 / 65
Регистрация: 05.05.2014
Сообщений: 2,324
05.10.2016, 13:28 #52
Наверное лучшая библиотека для создания древовидных структур, поддержка DnD, гибкость и простота использования:
https://www.jstree.com/demo/
0
Fedor Vlasenko
Программист Php, Js
809 / 542 / 156
Регистрация: 01.02.2015
Сообщений: 1,664
05.10.2016, 14:25 #53
Цитата Сообщение от pro_100_gram Посмотреть сообщение
Наверное лучшая библиотека для создания древовидных структур, поддержка DnD, гибкость и простота использования:
Мой выбор Dinatree
0
cyb0rg_01
Фрилансер
436 / 335 / 65
Регистрация: 05.05.2014
Сообщений: 2,324
05.10.2016, 15:17 #54
Fedor Vlasenko, мне эта понравилась простотой и возможностями: за 6 часов 90% необходимых возможностей изучил, для полного манипулирования каталогами, файлами, настройками и прочее.
0
cyb0rg_01
Фрилансер
436 / 335 / 65
Регистрация: 05.05.2014
Сообщений: 2,324
21.11.2016, 16:08 #55
Наконец-то понял кватернионы. простейшая 3D-леталка на three.js в честь этого (управление WASDQE + мышь):

http://codepen.io/pro_100_gram/pen/LbWZyv


PHPHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
<html>
    <head>
        <title>SpaceShip</title>
        <style>
            body { margin: 0; }
        </style>
    </head>
    <body>
        <script src="three.min.js"></script>
 
        <script>    
            var loader = new THREE.JSONLoader();
            loader.load("https://api.myjson.com/bins/2w5m2", function (geom, mater) {
                var mater = new THREE.MeshNormalMaterial({ color: 0x00ff00 });
                var spaceShip = new THREE.Mesh(geom, mater);
                onLoadCompleted(spaceShip);
            });
 
 
            var onLoadCompleted = function (spaceShip) {
                var scene = new THREE.Scene();
                var camera = new THREE.PerspectiveCamera(30, window.innerWidth / window.innerHeight, 0.1, 2000);
 
                var renderer = new THREE.WebGLRenderer({ antialias: true });
                renderer.setSize(window.innerWidth, window.innerHeight);
                document.body.appendChild(renderer.domElement);
 
                var geometry = new THREE.BoxGeometry(10, 10, 10);
                var material = new THREE.MeshNormalMaterial({ color: 0x00ff00 });
                var cube = new THREE.Mesh(geometry, material);
 
                cube.position.z = -300;
                cube.position.y = 10;
 
                camera.position.y = 10;
                camera.position.z = 30;
                spaceShip.rotation.y = Math.PI;
                camera.lookAt(new THREE.Vector3(0, 5, 0));
 
                scene.add(cube);
 
                var group = new THREE.Object3D();
                group.add(spaceShip);
                group.add(camera);
 
                scene.add(group);
 
                for (var i = 0; i < 300; ++i) {
                    var dotGeometry = new THREE.Geometry();
                    dotGeometry.vertices.push(new THREE.Vector3(Math.random() * (1500 + 1500) - 1500, Math.random() * (1500 + 1500) - 1500, Math.random() * (1500 + 1500) - 1500));
                    var dotMaterial = new THREE.PointCloudMaterial({ size: 1, sizeAttenuation: true });
                    var dot = new THREE.Points(dotGeometry, dotMaterial);
                    scene.add(dot);
                }
 
                var cameraControl = new CameraControl(group);
 
                var render = function () {
                    cameraControl.update();
                    requestAnimationFrame(render);
                    renderer.render(scene, camera);
                };
 
                render();
            }
 
 
            function CameraControl(object3D) {
                var rotationQuaternion = new THREE.Quaternion();
                var rotationVector = new THREE.Vector3(0, 0, 0);
                var movingVector = new THREE.Vector3(0, 0, 0);
                var rotationSpeed = 0.01;
                var movingSpeed = 1;
 
                this.update = function () {
                    object3D.translateX(movingVector.x);
                    object3D.translateY(movingVector.y);
                    object3D.translateZ(movingVector.z);
 
                    rotationQuaternion.set(rotationVector.x, rotationVector.y, rotationVector.z, 1).normalize();
                    object3D.quaternion.multiply(rotationQuaternion);
                    object3D.rotation.setFromQuaternion(object3D.quaternion, object3D.rotation.order);
 
 
                };
 
                window.addEventListener('keydown', function (event) {
                    if (event.keyCode == 87) {
                        movingVector.z = -1;
                    }
                    else if (event.keyCode == 83) {
                        movingVector.z = 1;
                    }
                    else if (event.keyCode == 65) {
                        movingVector.x = -1;
                    }
                    else if (event.keyCode == 68) {
                        movingVector.x = 1;
                    }
                    else if (event.keyCode == 81) {
                        movingVector.y = -1;
                    }
                    else if (event.keyCode == 69) {
                        movingVector.y = 1;
                    }
                    movingVector.multiplyScalar(movingSpeed);
                });
                window.addEventListener('keyup', function (event) {
                    if (event.keyCode == 87) {
                        movingVector.z = 0;
                    }
                    else if (event.keyCode == 83) {
                        movingVector.z = 0;
                    }
                    else if (event.keyCode == 65) {
                        movingVector.x = 0;
                    }
                    else if (event.keyCode == 68) {
                        movingVector.x = 0;
                    }
                    else if (event.keyCode == 81) {
                        movingVector.y = 0;
                    }
                    else if (event.keyCode == 69) {
                        movingVector.y = 0;
                    }
                });
 
                window.addEventListener('mousemove', function (event) {
                    rotationVector.y = (window.innerWidth / 2 - event.clientX) / (window.innerWidth / 2) * rotationSpeed;
                    rotationVector.x = (window.innerHeight / 2 - event.clientY) / (window.innerHeight / 2) * rotationSpeed;
                });
            }
        </script>
    </body>
</html>
0
Опан
Юзер с абсолютным слухом
392 / 335 / 70
Регистрация: 17.12.2010
Сообщений: 1,016
01.03.2017, 12:20 #56
Простой конвертер аудиофайлов из формата WAW в формат МП3 с использованием библиотеки libmp3lame.min.js
Хочу предложить конвертер из WAW в МП3. Это - результат упрощения мной сложного примера, найденного в интернете. Изначально этот пример был рассчитан на конвертирование только монофонических WAV-файлов. Правда, после того, как я подключил возможность конвертировать стереофайлы, теперь они обрабатываются корректно, а вот монофайлы тоже с натяжкой конвертируютя, но при этом почему-то используют до 500 мб оперативки.
Откуда я был скачал исходный пример и библиотеку, я уже сейчас к сожалению не смог найти, поэтому отправляю во вложении библиотеку, так же тестовый WAV-файл и результат конвертирования:
PHPHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<!DOCTYPE html>
<html>
<head>
    <title>Конвертер из WAV в MP3</title>
    <meta charset="windows-1251">
</head>
<body bgcolor=#ccc><center>
<h3>Конвертер из WAV в MP3</h3>
<audio id=audio controls></audio><br><br>
<div id="fileInputContainer">
    <input id=myfile type=file onchange="myconverting(this.files[0])">
</div><br>
<a id=mydownloadlink style="display:none">тут будет ссылка на скачивание MP3</a>
<script src="libmp3lame.min.js"></script>
<script>
function myconverting(blob){
    mydownloadlink.href="";
    mydownloadlink.innerHTML="подождите...";
    mydownloadlink.style.display="block";
    var fileReader=new FileReader();
    fileReader.readAsArrayBuffer(blob);
    fileReader.onload=function(){
        var arrayBuffer=this.result;
        var buffer=new Uint8Array(arrayBuffer);
        function readInt(i,bytes){
            var ret=0,shft=0;
            while(bytes){
                ret+=buffer[i]<<shft;
                shft+=8;
                i++;
                bytes--;
            };
            return ret;
        };
        var sampleRate=readInt(24,4);
        var bitsPerSampl=readInt(34,2);
        var numchannels=readInt(30,1); // определяем количество стереоканалов в файле - 1 или 2 
        var splitchannels=2*Math.floor(numchannels/2);
        var samples=buffer.subarray(44);
        mp3codec = Lame.init();
        Lame.set_mode(mp3codec,1);
        Lame.set_num_channels(mp3codec,2);
        Lame.set_num_samples(mp3codec,samples);
        Lame.set_in_samplerate(mp3codec,sampleRate);
        Lame.set_out_samplerate(mp3codec,sampleRate);
        Lame.set_bitrate(mp3codec,128); // задаём битрейт
        Lame.init_params(mp3codec);
        var f32Buffer_l=new Float32Array(samples.length/numchannels);
        var f32Buffer_r=new Float32Array(samples.length/numchannels);
        for(var i=0;i<samples.length/numchannels;i++){
            f32Buffer_l[i]=(samples[i*2*numchannels]+((samples[i*2*numchannels+1]^128)*256)-0x8000)/0x8000;
            f32Buffer_r[i]=(samples[i*2*numchannels+splitchannels]+((samples[i*2*numchannels+splitchannels+1]^128)*256)-0x8000)/0x8000;
        }
        var mp3data=Lame.encode_buffer_ieee_float(mp3codec,f32Buffer_l,f32Buffer_r); // конвертируем
        Lame.close(mp3codec);
        mp3codec=null;
        var binary="",bytes=new Uint8Array(mp3data.data);
        for (var i=0;i<bytes.byteLength;i++){binary+=String.fromCharCode(bytes[i]);};
        var url='data:audio/mp3;base64,'+window.btoa(binary);
        audio.src=url;
        audio.play(); // играем
        mydownloadlink.href=url;
        mydownloadlink.innerHTML="с к а ч а т ь"; // качаем
        var nd=new Date();
        mydownloadlink.download=nd.getFullYear()+""+az(nd.getMonth()+1)+""+az(nd.getDate())+""+az(nd.getHours())+""+az(nd.getMinutes())+""+az(nd.getSeconds())+".mp3";
        fileInputContainer.innerHTML = fileInputContainer.innerHTML;
        function az(i){return(i<10)?"0"+i:i;};
    };
};
</script>
</center></body>
</html>
В браузере Опера к сожалению не работает.
0
Вложения
Тип файла: zip lamemin.zip (827.3 Кб, 1 просмотров)
8Observer8
1637 / 1039 / 136
Регистрация: 05.10.2013
Сообщений: 3,540
Записей в блоге: 55
17.11.2017, 16:49 #57
Минимальная программа на WebGL (это эквивалент OpenGL ES 2.0 для браузера), которая выводит красную точку размеров 10 пикселей в координате (0, 0, 0)

https://jsfiddle.net/8Observer8/8kduku4r/1/

PHPHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <title>Shortest Program</title>
</head>
 
<body>
    <canvas id="renderCanvas" width="200" height="200" style="border: 1px solid black;"></canvas>
 
    <script>
        var VSHADER_SOURCE =
            'void main()\n' +
            '{\n' +
            '    gl_Position = vec4(0.0, 0.0, 0.0, 1.0);\n' +
            '    gl_PointSize = 10.0;\n' +
            '}\n';
 
        var FSHADER_SOURCE =
            'void main()\n' +
            '{\n' +
            '    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n' +
            '}\n';
 
        function main()
        {
            var gl = document.getElementById('renderCanvas').getContext('webgl');
            var vShader = gl.createShader(gl.VERTEX_SHADER);
            gl.shaderSource(vShader, VSHADER_SOURCE);
            gl.compileShader(vShader);
            var fShader = gl.createShader(gl.FRAGMENT_SHADER);
            gl.shaderSource(fShader, FSHADER_SOURCE);
            gl.compileShader(fShader);
            var program = gl.createProgram();
            gl.attachShader(program, vShader);
            gl.attachShader(program, fShader);
            gl.linkProgram(program);
            gl.useProgram(program);
            gl.drawArrays(gl.POINTS, 0, 1);
        }
        main();
    </script>
</body>
 
</html>
1
8Observer8
1637 / 1039 / 136
Регистрация: 05.10.2013
Сообщений: 3,540
Записей в блоге: 55
19.11.2017, 10:50 #58
Минимальная программа на WebGL версии 2.0. WebGL 2.0 базируется на OpenGL ES 3.0. Пример выводит точку красного цвета размером 10 пикселей.

https://jsfiddle.net/8Observer8/9b2k6mr8/

Название: 001_point-in-webgl2.png
Просмотров: 11

Размер: 722 байт

PHPHTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!DOCTYPE html>
<html lang="en">
 
<head>
    <meta charset="UTF-8">
    <title>Shortest Program</title>
</head>
 
<body>
    <canvas id="renderCanvas" width="200" height="200" style="border: 1px solid rgb(159, 133, 230);"></canvas>
 
    <script>
        var vertexShaderSource =
            `#version 300 es
 
    void main()
    {
        gl_Position = vec4(0.0, 0.0, 0.0, 1.0);
        gl_PointSize = 10.0;
    }`
 
        var fragmentShaderSource =
            `#version 300 es
 
    precision mediump float;
 
    out vec4 outColor;
 
    void main()
    {
        outColor = vec4(1.0, 0.0, 0.0, 1.0);
    }`;
 
        function main()
        {
            var gl = document.getElementById('renderCanvas').getContext('webgl2');
 
            var vShader = gl.createShader(gl.VERTEX_SHADER);
            gl.shaderSource(vShader, vertexShaderSource);
            gl.compileShader(vShader);
 
            var fShader = gl.createShader(gl.FRAGMENT_SHADER);
            gl.shaderSource(fShader, fragmentShaderSource);
            gl.compileShader(fShader);
 
            var program = gl.createProgram();
            gl.attachShader(program, vShader);
            gl.attachShader(program, fShader);
            gl.linkProgram(program);
            gl.useProgram(program);
 
            gl.drawArrays(gl.POINTS, 0, 1);
        }
        main();
    </script>
</body>
 
</html>
1
8Observer8
1637 / 1039 / 136
Регистрация: 05.10.2013
Сообщений: 3,540
Записей в блоге: 55
19.11.2017, 23:19 #59
Создал тему: Небольшие примеры на WebGL Если вам интересно, то подписывайтесь и выкладывайте свои примеры.
1
19.11.2017, 23:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2017, 23:19
Привет! Вот еще темы с ответами:

Обмен готовыми решениями - PHP
&lt;?PHP echo getfilesize($_GET); // Функция для определения размера function getfilesize($filename) { // Проверяем,...

Обсуждение класса постраничной навигации из темы "Обмен готовыми решениями" - PHP
Выделено из темы: http://www.cyberforum.ru/php/thread158262-page2.html Para bellum, может стоит добавить методу get еще один не...

Связь с готовыми mdb и accdb через форму - C#
Добрый вечер! Нужна программная реализация подключения к бд, вывод данных из таблицы на форму через datagridview и сохранение новых...

.NET 4.x Может кто дать сайт с бесплатными готовыми курсовыми - C#
может кто дать сайт с бесплатными готовыми курсовыми? ну или скинуть готовую, может завалялась где


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
59
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru