Автор работы: Пользователь скрыл имя, 29 Мая 2012 в 15:00, дипломная работа
Одной из ведущих отраслей современной техники является машиностроение. По уровню развития машиностроения судят о развитии производительных сил в целом.
Прогресс машиностроения в свою очередь определяется созданием новых
высокопроизводительных и надёжных машин. Решение этой важнейшей проблемы основывается на комплексном использовании результатов многих дисциплин и, в первую очередь, теории механизмов и машин.
Введение 4
1. Описание предметной области: теория механизмов и машин 5
1.1 Структура строения механизма 5
1.1.1 Общее понятие механизма 5
1.1.2 Звенья механизмов 5
1.1.3 Кинематические пары 7
1.1.4 Кинематические цепи 10
1.1.5 Виды механизмов и их структурные схемы 11
1.2Механизм и его подвижность 13
1.2.1 Структурная формула 13
1.2.2 Пассивные связи и лишние степени свободы 15
1.3 Закон образования механизмов по Ассуру 16
1.3.1.Сущность закона Ассура 16
1.3.2 Двухзвенные механизмы 17
1.3.3 Группы нулевой подвижности 17
2 Задачи кинематики механизмов и их решение 20
2.1 Теоретические основы и определения 20
2.1.1 Геометрическая модель звеньев и пар пространственного рычажного механизма 20
2.1.2 Геометрическая модель группы 22
2.1.3 Формула Чейза определения направления оси по 2-м углам 23
2.2 Решение прямой задачи о положениях механизма 24
2.2.1 Механизм как набор первичных механизмов и наслоение структурных групп 24
2.2.2 Определения величин, используемых при расчете положения группы 26
2.3 Аналитический подход к расчету положения структурной группы 28
2.3.1 Двухзвенная пространственная группа В-Сп-С 28
2.3.2 Двухзвенная плоская группа В-В-В 29
2.4 Алгоритм построения последовательности расчета положений структурных групп, составляющих механизм 30
3. Конструирование системы моделирования механизмов 31
3.1 Предварительные условия 31
3.1.1 Определение проблемы 31
3.1.2 Выработка требований к будущей программной системе 31
3.2 Проектирование архитектуры 32
3.3 Пользовательский интерфейс программы 34
3.3.1 Окно программы 34
3.3.2 Условные обозначения программы 34
Заключение 35
Литература 36
Приложение 1 37
GeomObject.cs 37
Holder.cs 37
Link.cs 38
Pair.cs 39
MechManager.cs 40
RRRGroup.cs 44
TestMech.cs 45
}
Gl.glEnd();
}
}
class Pair:GeomObject
{
public const int TYPE_UNKNOWN = 0;
public const int TYPE_ROTATE = 1;
public const int TYPE_MAIN = 2;
public int mId;
public int mType;
public Vector3D mPos;
public bool isHolded;
public static Vector3D bad = new Vector3D(1000000f, 1000000f, 1000000f);
public Pair(int id,Vector3D pos, int type, bool hold)
{
mId = id;
mPos = new Vector3D(pos);
if (id == 1)
{
mType = 2;
}
else
mType = type;
isHolded = hold;
}
public Pair(int id, int type, bool hold)
{
mId = id;
mPos = bad;
mType = type;
isHolded = hold;
}
override public void draw()
{
if (isHolded)
{
MechManager.getInstance().
}
Gl.glPushMatrix();
{
Gl.glTranslated(mPos.X, mPos.Y, mPos.Z);
Gl.glRotated(90, 1, 0, 0);
Gl.glTranslated(0, 0, -1);
Gl.glColor3d(1, 0, 0);
Glut.glutSolidCylinder(0.15, 2, 20, 20);
Gl.glTranslated(0, 0, 0.5);
Glut.glutSolidCylinder(0.3, 1, 20, 20);
}
Gl.glPopMatrix();
}
}
class MechManager
{
public Dictionary<Int32, Pair> mPairs;
public List<Holder> mHolderList;
public List<Link> mLinkList;
private static MechManager sInstance = null;
private static int sPairId;
private static int sLinkId;
private MechManager()
{
sPairId = 1;
sLinkId = 1;
mPairs = new Dictionary<int,Pair>();
mHolderList = new List<Holder>();
mLinkList = new List<Link>();
}
public static MechManager getInstance()
{
if (sInstance == null)
{
sInstance = new MechManager();
}
return sInstance;
}
public void addPair(Vector3D pos, int type, bool hold)
{
Pair
pair = new Pair(sPairId,pos,Pair.TYPE_
mPairs.Add(sPairId, pair);
sPairId++;
}
public void addEmptyPair(int type, bool hold)
{
Pair
pair = new Pair(sPairId,Pair.TYPE_ROTATE,
mPairs.Add(sPairId, pair);
sPairId++;
}
public Pair findPairById(int id)
{
Pair pair;
if (mPairs.TryGetValue(id, out pair))
{
return pair;
}
else
{
return null;
}
}
public bool addHolder(int pairId)
{
Holder holder = new Holder(pairId);
if (findPairById(pairId) != null)
{
mHolderList.Add(holder);
return true;
}
return false;
}
public Holder getHolderForPair(int pairId)
{
for (int i = 0; i < mHolderList.Count; i++)
{
if
(mHolderList.ElementAt(i).
{
return mHolderList.ElementAt(i);
}
}
return null;
}
public bool addLink(int pairId1,int pairId2,float length, float angle)