Главная > Программирование > Куб Маврикия

Куб Маврикия

12 Июль 2009

Название изначально задумывалось как "Кубик Маврика", на подобие с Кубиком Рубика, но Google перевел его как "cube mauritius", что означает "Куб Маврикия", так и оставил.

После записи о вращении квадрата я немного полистал учебники по геометрии, и даже "основы учебного академического рисунка", и поднабрался знаний по поводу того что и как должно быть. И вот пришло время поделится этим с вами.

Я решил что до того как рисовать красивые полупрозрачные грани неплохо было бы научится вращать вершины. Чем собственно и занялся. Четыре точки вращаются в трех плоскостях. Но там немного хитро по оси OX вращение происходит при передвижении мышки вперед назад, а по оси OY и/или OZ происходит при передвижении мышки из стороны в сторону и зависит от того на какой грани лежит куб.

Развлекаемся:

Весь код показывать не буду, если захотите посмотрите, но главную функцию, которая рассчитывает позиции вершин обязательно надо показать.


function(){
	var data = [],
	dim = this.dimension,
	o = this.theta;
	for (var x = -dim; x <= dim; x += 2 * dim)
		for (var y = -dim; y <= dim; y += 2 * dim)
			for (var z = -dim; z <= dim; z += 2 * dim){
				var 
				a = x * Math.cos(o.x) - y * Math.sin(o.x),
				b = x * Math.sin(o.x) + y * Math.cos(o.x),
				c = b * Math.cos(o.y) - z * Math.sin(o.y),
				d = b * Math.sin(o.y) + z * Math.cos(o.y);
				data.push({
					left : 250 + a * (d + 2) * 50,
					top  : 250 + c * (d + 2) * 50,
				});
			}
	return data;
}

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

В планах на ближайшее будущее новый куб у которого ничего никуда не вылазит.

  1. 12 Июль 2009 в 22:06 | #1
    сделай с границами, вообще красота! ))
  2. 13 Июль 2009 в 04:53 | #2
    прикольная хуйня!!
  3. 13 Июль 2009 в 04:54 | #3
    пошел повторю без канваса)))
  4. 13 Июль 2009 в 08:52 | #4
    @adw0rd уже сделал, сегодня выложу. @phpdude а я видел реализацию на 12 джпежках
  5. 14 Ноябрь 2010 в 11:10 | #5
    Привет) прикольно, прикольно получается. Сейчас тоже сел за учебники школьной математики)))
  6. 14 Ноябрь 2010 в 20:43 | #6
    Надо еще сделать чтоб квадраты двигались только тогда, когда курсор будет в нужной области :) Сделаешь?
  7. 14 Ноябрь 2010 в 22:37 | #7
    а в чем проблема то? сейчас "нужная область" это весь экран, ограничь его канвой например. будут проблемы подскажу.
  8. 15 Ноябрь 2010 в 17:09 | #8
    Долго соображал с математикой этой?))) Я вот например в школе плохо учился, просто не охота было да и сейчас не фонтан учусь ) Но не сказать что тупой, если надо то понимаю математику и физику. Загвозка в том если "надо" :D
  9. 15 Ноябрь 2010 в 17:25 | #9
    с этой - нет с прошлой тяжелее было http://mabp.kiev.ua/2009/07/10/square-mavrevicha/ и да я тоже на тройки учился а щас понял что надо... надо было учиться
  10. 15 Ноябрь 2010 в 19:22 | #10
    ну у меня и были двойки))
  11. 15 Ноябрь 2010 в 19:33 | #11
    ну так что сумел ограничить область?
  12. 15 Ноябрь 2010 в 19:56 | #12
    неа, позже сделаю. Кстати при медленной прокрутки поялвяется ощущение 3д) Мозг сам достраивает 3д )
Комментирование отключено.