Автор работы: Пользователь скрыл имя, 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
Источники информации в Интернете:
abstract class GeomObject
{
public GeomObject() { }
abstract public void draw();
}
class Holder:GeomObject
{
public Vector3D mPos;
public int mHoldedPairId;
public Holder(int id)
{
mHoldedPairId = id;
Pair
pair = MechManager.getInstance().
if (pair != null)
{
mPos = new Vector3D(pair.mPos);
}
}
override public void draw()
{
Gl.glPushMatrix();
{
Gl.glTranslated(mPos.X, mPos.Y, mPos.Z - 2);
Gl.glRotated(45, 0, 0, 1);
if (mHoldedPairId == 1)
{
Gl.glColor3d(0, 1, 1);
}
else
{
Gl.glColor3d(0, 1, 0);
}
Glut.glutSolidCylinder(2, 0.2, 4, 4);
}
Gl.glPopMatrix();
Gl.glPushMatrix();
{
Gl.glTranslated(mPos.X, mPos.Y + 1, mPos.Z - 2);
Glut.glutSolidCylinder(0.1, 2.1, 20, 20);
}
Gl.glPopMatrix();
Gl.glPushMatrix();
{
Gl.glTranslated(mPos.X, mPos.Y - 1, mPos.Z - 2);
Glut.glutSolidCylinder(0.1, 2.1, 20, 20);
}
Gl.glPopMatrix();
}
}
class Link:GeomObject
{
public const float mAngleBeta = 90;
public int mId;
public HashSet<Int32> LinkedPairIds;
public Vector3D mStart;
public Vector3D mEnd;
public float mLength;
public float mNormalAngle;
public Vector3D bad = new Vector3D(1000000f, 1000000f, 1000000f);
public Link(int id,int pairId1,int pairId2,Vector3D pos, float length, float angle)
{
mId = id;
LinkedPairIds = new HashSet<int>();
LinkedPairIds.Add(pairId1);
LinkedPairIds.Add(pairId2);
mLength = length;
mNormalAngle = angle;
mStart = new Vector3D(pos);
mEnd = new Vector3D(mStart.X + (float)Math.Cos(mNormalAngle * Math.PI / 180) * (float)Math.Sin(mAngleBeta * Math.PI / 180) * mLength, mStart.Y + (float)Math.Cos(mNormalAngle * Math.PI / 180) * (float)Math.Cos(mAngleBeta * Math.PI / 180) * mLength, mStart.Z - (float)Math.Sin(mNormalAngle * Math.PI / 180) * mLength);
}
public Link(int id, int pairId1, int pairId2, float length)
{
mId = id;
LinkedPairIds = new HashSet<int>();
LinkedPairIds.Add(pairId1);
LinkedPairIds.Add(pairId2);
mLength = length;
mStart = bad;
mEnd = bad;
}
public bool isLinkedWith(List<int> list)
{
for (int i = 0; i < list.Count; i++)
{
if
(LinkedPairIds.Contains(list.
{
return true;
}
}
return false;
}
public int getSecondPairId(int id)
{
if (LinkedPairIds.First() == id)
return LinkedPairIds.Last();
else
return LinkedPairIds.First();
}
override public void draw()
{
Vector3D
A = new Vector3D(MechManager.
Vector3D
B = new Vector3D(MechManager.
Gl.glLineWidth(3.0f);
Gl.glBegin(Gl.GL_LINES);
{
Gl.glColor3d(0, 0, 1);
Gl.glVertex3f(A.X, A.Y, A.Z);
Gl.glVertex3f(B.X, B.Y, B.Z);