четверг, 18 августа 2011 г.

Упрощение 3D модели

Если необходимо провести упрощение 3D модели, в частности уменьшить количество узлов и поверхностей тела, то возможно пригодиться программа MeshLab.
В данной программе присутствует множество различных фильтров, однако в них можно и запутаться (как это произошло со мной). Для моей цели необходимо было упростить модель примерно в 15000 узлов до 3000. Затем набор точек преобразовывался с помощью небольшой программы на Python из формата *.wrl в команды понятные ANSYS. К сожалению не все фильтры из MeshLab упрощают модель, и еще меньше фильтров позволяют не поломать топологию (из-за чего ANSYS не может построить объемную модель из поверхностей).

Quadric Edge Collapse Decimation - один из фильтров, который позволяет упростить модель без нарушения топологии. Он находиться в Filters \ Remeshing, simplification and reconstruction \ Quadric Edge Collapse Decimation.

Настройки фильтра показаны на рисунке ниже

Для последовательного применения фильтра необходимо закрыть и снова открыть фильтр.

среда, 10 августа 2011 г.

Шкала оценки

Существует множество шкал оценки чего-либо. Мне кажется, что самая лучшая - это шкала в 7 элементов. Попробую объяснить свою точку зрения.

Самая большая из наиболее известных шкал - 100-бальная шкала. Согласитесь, если вас попросят сказать как вы оцениваете свое отношение, например к шоколаду, трудно будет сказать с точность до одного балла свое отношение. Скорее всего, оценка будет производиться по 10-бальной шкале, но с учетом, что 1 балл = 10 баллам.
Поскольку мне сложно представить с чем ассоциировать каждый элемент для шкалы-10, то и другим людям это может быть проблематично, поэтому шкалу-10 можно отбросить.
С другой стороны самая маленькая шкала "да|нет" часто не позволяет оценить свое отношение, особенно когда вы затрудняетесь ответить. В этом случае будет использоваться шкала "да|нет|не знаю".
Еще одним важным моментом для шкал является наличие нейтрального элемента, таким образом шкала должна быть нечетной.
Итак сократили количество шкал до 3, 5, 7, 9 элементов.

Я редко встречал шкалу из 9 элементов, поэтому я ее тоже отбрасываю.
Для оценки качества шкала-3 будет выглядеть "плохо|нейтрально|хорошо" - это наверно одна из наиболее употребляемых шкал, т.к. довольно просто отнести один объект к элементу из шкалы. Но если, объектов больше, скажем больше 5 (а это бывает часто), то назревает необходимость использовать более точную шкалу. Поскольку шкала-3 никуда не годиться при существовании нескольких объектов исследования, то она отбрасывается.
Остается шкала-5 и шкала-7.

Составим именованный ряд элементов.
Шкала-5 Шкала-7
  1. Ужасно
  2. Плохо
  3. Нормально
  4. Хорошо
  5. Отлично
  1. Отвратительно/Ужасно
  2. Плохо/Сойдет и так
  3. Хуже среднего
  4. Нормально
  5. Лучше среднего/Хорошо
  6. Почти идеал/Отлично
  7. Идеально
Наверно шкала-5 была бы самая лучшая, и наиболее значимым фактом в этом является школьная система оценки. Но часто люди говорят, что вот это лучше среднего, а вот это почти идеал. А раз есть почти идеал то нужна и категория "Идеал". Таким образом мы получаем шкалу из 3-х элементов + нейтральный. По симметрии получаем еще 3 элемента снизу от нейтрального, итого 7. Поскольку я часто пользуюсь пунктами 5,6, а также иногда иногда 2,3,4, то мне ближе шкала-7.

понедельник, 1 августа 2011 г.

Широкий Blogger

Когда пишешь новый пост, по появляется довольно узкое окно ввода. Почему оно не расширяется мне не понятно, а так как я недавно начал писать большой пост - узкое окно просто не приемлемо для меня. В связи с этим я решил написать плагин для FF, что бы окно было шире. Прощу прощения за ошибки в коде/архитектуре плагина, т.к. это мой первый плагин, на данный момент в большей степени пробный экземпляр нежели готовый продукт. Результат же выглядит следующим образом
Альбом: 29 июля 2011 г.
Изменения размера формы происходит благодаря коду (overlay.js, подробности можно посмотреть в предыдущем посте о том как создавать плагины для FF):

var gbepfw = {
  onLoad: function() {
    var appcontent = document.getElementById("appcontent");
    if (appcontent)
      appcontent.addEventListener("DOMContentLoaded", gbepfw.onPageLoad, true); 
  },
  getFirstDivByClass: function(theClass,doc) {
    var allHTMLTags=doc.getElementsByTagName("div");
    for (i=0; i < allHTMLTags.length; i++)
      if (allHTMLTags[i].className==theClass)
        return allHTMLTags[i];
  },
  onPageLoad: function(aEvent) {
    //TODO - check url on http://www.blogger.com/post-edit.g
    var doc = aEvent.originalTarget; // doc - документ, на котором произошло событие "onload"
    doc.getElementById("postingHtmlBox").style.width="100%";
    gbepfw.getFirstDivByClass("main",doc).style.width = gbepfw.getClientWidth(0.9,doc)+"px";
  },  
  getClientWidth: function(koef,doc) { 
    var width = 1000;
    if (window.innerWidth) 
      width = window.innerWidth;
    else if (doc.documentElement && doc.documentElement.clientWidth) 
      width = doc.documentElement.clientWidth; 
    else if (doc.body && doc.body.clientWidth) 
      width = doc.body.clientWidth; 
    width *= koef;
    return width;
  }
};
window.addEventListener("load", function () { gbepfw.onLoad(); }, false);
Описание функций:
  • getClientWidth() - вычисляет размер окна;
  • getFirstDivByClass() - ищет первый "div" (он единственный) с css-классом "main" ;
  • onLoad() - точка входа;
  • onPageLoad() - применяем новые стилевые свойства для "div" с css-классом "main" и элемента с id "postingHtmlBox".