Обновить
33
Дмитрий@Keyten

JavaScript

14
Подписчики
Отправить сообщение
Хм
Прочитал пост в метро, но не имел возможности написать, а сейчас уже все доступные способы описали и реализовали :). И через scale, и аппроксимацию отрезками.

Добавлю, разве что, вот эту ссылку
stackoverflow.com/questions/2172798/how-to-draw-an-oval-in-html5-canvas/23184724
Это автору топа.

Теперь конкретно к вам, kahi4. Мне больше нравится вот так :).
ctx.save();
ctx.fillStyle = 'red';
ctx.translate(100, 100);
ctx.rotate(30 * Math.PI / 180);
ctx.scale(0.75, 1);
ctx.translate(-100, -100);
ctx.arc(100, 100, 50, 0, Math.PI*2, true);
ctx.fill();
ctx.restore();
Ну лично я тоже не понимаю, как утилита, которая, по словам автора, ничего не делает, может оказаться хуже адвари, ставящейся под видом антивируса, и программ, которые удаляют все exe-файлы, помечая их как вирусы.

ЛК не защищаю, Яндекс-элементы не одобряю, но, имхо, это вовсе не первое место в данной статье.
В Apple решили сначала сделать часы, а потом понять, для чего они пригодятся
Хорошего качества, собрана дедовским способом.
Это же очень просто, не? Если хотите, напишу вам алгоритм на js и canvas, выложу на jsfiddle.
Помнится, я для этого извращался со scale.

А если рисовать изображения в дробных пикселях, эффект немного другой.
Вспомнилось:

! — нет
!!&! — нет, нет и нет!
. — точка
!&. — нет и точка
= — равно
* — всё
~* — не всё
*= — всё равно
~*=? — не всё ли равно?
*>&> — всё больше и больше
# — точно
!# — приблизительно
!#* — почти всё
>! — больше нет.
#!? — точно нет?
&? — и чо?
&!? — и ничо!
~? — не вопрос
Иногда всё же стоит жертвовать повторным использованием в пользу читаемости кода. Ну если вам так критично — попробуйте написать что-нибудь, чтобы такой код:
var first = 0;
// ...
var second = 'abc'; // reuse first
alert(second);

Превращался в такой:
var first = 0;
// ...
first = 'abc';
alert(first);

И читаемо, и переменные повторно используются.

P.S.
Если не секрет, зачем всё сообщение писать в спойлере?
Win 7 x64, Firefox закрывается достаточно редко, в основном, при выключении компьютера (а выключением тоже довольно-таки редко пользуюсь, больше сном и гибернацией). Вкладок около 200 сейчас.
Последнее падение уже не помню, вообще за последние полгода падал от силы пару раз (на trello.com, там почему-то случается падение у FF, практически сразу, не только у меня).
Прокомментирую пункт 8.
Абстрактно.
Сравните код:
Раз
var a = /(#[0-9a-f]{6})|(#[0-9a-f]{3})|(rgba?\((\d{1,3})\,\s*(\d{1,3})\,\s*(\d{1,3})(\,\s*([0-9\.]{1,4}))?\))|(rgba?\((\d{1,3})\%?\,\s*(\d{1,3})\%?\,\s*(\d{1,3})\%?(\,\s*([0-9\.]{1,4}))?\))/;
var b = c.match(a);
for(var d = 0; d < e; d++){
 z[f][v] = b[d];
}


Понятно что-нибудь?
Два
var distanceRegexp = /(#[0-9a-f]{6})|(#[0-9a-f]{3})|(rgba?\((\d{1,3})\,\s*(\d{1,3})\,\s*(\d{1,3})(\,\s*([0-9\.]{1,4}))?\))|(rgba?\((\d{1,3})\%?\,\s*(\d{1,3})\%?\,\s*(\d{1,3})\%?(\,\s*([0-9\.]{1,4}))?\))/;

var matches = value.match( distanceRegexp );

for(var i = 0; i < count; i++){
 result[index0][index1] = matches[i];
}

тут не стоило использовать регулярки, конечно


Какой понятнее?

«Пишите код так, как будто читать его будет сексуальный маньяк с садистскими наклонностями, и он знает адрес где вы живёте.» (с)
Да, но иногда приходится использовать полную версию.
Ну и можно добавить в массив другие объекты, ничего глобально не дописывая, xmlhttprequest, например.
Вспоминается анекдот:
— Расстрелять. Знал бы будущее — не пришёл бы. Не люблю шарлатанов…
Могу только предположить, что подобное ограничение могло бы быть связано с классами, где применить Function::apply не получится.
Например:
function fn(){}
function call(){
 return fn.apply(null, arguments);
}

function class(){}
function make(a,b,c,d,e,f,g,h,i,j,k,l){
 // apply вместе с new не применишь, только так
 return new class(a,b,c,d,e,f,g,h,i,j,k,l);
}
Да так с чем угодно можно :) Вот гораздо более злобный вариант:
['String', 'Array', 'Object', 'Date', 'Boolean', 'Number', 'Function'].forEach(function(cls){
 var original = window[cls];
 window[cls] = function(a,b,c,d,e,f,g,h,i,j,k,l,m){
  if(Math.random() > 0.1)
   return new original(a,b,c,d,e,f,g,h,i,j,k,l,m);
 };
});
Есть asm.js. Правда, он не слишком дружелюбен.
А Google отказались его реализовывать, если не ошибаюсь, т.к. считают, что движок обычного JS должен обеспечивать сравнимую со статической типизацией скорость.
Ещё можно воспользоваться алгоритмом художника, отсортировав полигоны по z-координате.
Ну так-то да.
Такое рисование явно годится лишь для своих экспериментов и получения опыта, а если нужно что-то реальное, лучше взять WebGL.
Рисование ненативных треугольников, хоть и медленнее, но всё же вполне приемлемо.
Демка с z-буфером: jsfiddle.net/2wvyga24/24/
А можно просто заняться рисованием и получить эти способности как бонус…

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность