PDA

View Full Version : Може ли някой да ми реши 2 задачки на С++



PisiTy93
06-11-2011, 20:10
Задача 57. Точка е зададена с координатите си. Да се изобразят на екрана точката и образът й при симетрия спрямо ординатната ос.


Задача 71. За даден паралелепипед да се изчертае сечение през три точки от околните му ръбове.

Chacho
06-11-2011, 22:04
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
Ми добре благодаря все пак ами другата задача и тя ли е същата?

Chacho
06-12-2011, 13:34
За другата пресмяташ колко е разстоянието по х от точката до ординатната ос и дали е надясно или наляво (положително или отрицателно разстояние. Ако точката е х, а разстоянието - а, то задачата е да изобразиш точката (х-2а, у) или (х+2а, у). Първият случай е, ако точката е вдясно от ординатната ос, а вторият - ако е отляво.

Не съм работил наскоро с графичните библиотеки и не помня стандартните функции и координатите на оординатната ос (дали е (х,0)).


Доста съм зает в момента и нямам възможност да пиша програмите.

PisiTy93
06-13-2011, 08:49
Мхм ами ще можеш ли примерно до 28 да ми ги напишеш като програма защото сега както ми ги обесняваш си нямам никаква представа как да ги напрая на програма. :)