PisiTy93
06-11-2011, 20:10
Задача 57. Точка е зададена с координатите си. Да се изобразят на екрана точката и образът й при симетрия спрямо ординатната ос.
Задача 71. За даден паралелепипед да се изчертае сечение през три точки от околните му ръбове.
71 задача.
Нека са дадени три точки - M(x1,y1,z1), N(x2,y2,z2) ,P(x3,y3,z3).
От тук определяме уравнението на равнината като детерминантата на следната матрица A:
x-x1, y-y1, z-z1
x2-x1, y2-y1, z2-z1
x3-x1, y3-y1, z3-z1
Нека тази матрица е еквивалентна на (направим полагания за всичките членове) на матрицата В:
a, b, c
d, e, f
g, h, i
Тогава det(A)=det(B)= a(ei - hf) - d(bi - hc) + g (bf - ec)
От тук получаваме общо уравнение на равнината на сечението от тип Ах+Ву+Cz+D=0
Ще направим една функция, която изчислява А,В,С и D, и ги връща по някакъв начин (в масив примерно).
След това ще направим една функция, която по въведени х,у и z на дадена точка връща true, ако точката е от равнината и false, ако не е. Това става, като провери, дали Ax+By+Cz+D=0. (Ще ползваме предишната функция, за да напишем тази). Нека тази функция е IsOf(x,y,z)
След това ще търсим общите точки на тази равнина с пространството в паралелепипеда. Не знам, дали има по-лесен начин, но това може да се осъществи с 3 цикъла.
Да кажем, че дължината на страните на паралелепипеда е 100пиксела, 50пиксела, 70 пиксела. Също така, нека точка А да бъде с координати А(50,80,110).
Правим следното
for (i=50;i<=50+100;i++)
{
for (j=80;j<=80+50;j++)
{
for (k=110;k<=110+70;k++)
{
if (IsOf(i,j,k)==1)
{Изобразяваме точка с координати (i,j,k);}
}
}
}
Тъй като е двуизмерно чертането, у координатата ще е всъщност z координатата. у координатата пък ще трябва да се намери начин да се изобразява. Тъй като ползваме цели числа за координатите, няма да е удобно да се използва питагоровата теорема и ще трябва да се търси друг пособ, за да се изчисли.
Може би има вариант да въвеждаш А,В,D,A1 на паралелепипедът, по които да го определиш и ползвайки координатите на D да намери зависимост за х и у, но не съм сигурен, как и дали може да се дефинира функция y(x,z) на база на даденото.
Това е алгоритъмът, който успях да измисля, но няма шанс да го реализирам. Прекалено дълго е, за да си го напиша дори за мое собствено домашно.
PisiTy93
06-12-2011, 08:31
Ми добре благодаря все пак ами другата задача и тя ли е същата?
За другата пресмяташ колко е разстоянието по х от точката до ординатната ос и дали е надясно или наляво (положително или отрицателно разстояние. Ако точката е х, а разстоянието - а, то задачата е да изобразиш точката (х-2а, у) или (х+2а, у). Първият случай е, ако точката е вдясно от ординатната ос, а вторият - ако е отляво.
Не съм работил наскоро с графичните библиотеки и не помня стандартните функции и координатите на оординатната ос (дали е (х,0)).
Доста съм зает в момента и нямам възможност да пиша програмите.
PisiTy93
06-13-2011, 08:49
Мхм ами ще можеш ли примерно до 28 да ми ги напишеш като програма защото сега както ми ги обесняваш си нямам никаква представа как да ги напрая на програма. :)