Наскільки я знаю: потрібно рахувати 3 визначники, які і будуть координатами нормалі.
Перша координата це визначник складений з координат т. А(y, z) та т. B(y, z) і т. д.
Але чи правильно я думаю, підкажіть, будь ласка.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Повідомлення користувача Proh8530
Сторінки 1
Наскільки я знаю: потрібно рахувати 3 визначники, які і будуть координатами нормалі.
Перша координата це визначник складений з координат т. А(y, z) та т. B(y, z) і т. д.
Але чи правильно я думаю, підкажіть, будь ласка.
Усім привіт.
Роблю задачу усунення невидимих граней для проекції октаедра.
Так от для алгоритму мені потрібно знайти нормалі для кожної грані.
Питання як знайти їх, якщо я маю координати вершин октаедра.
struct OctaVertex {
float x, y, z;
};
а якщо не використовувати OpenGL для побудови октаедра.
Що потрібно для центральної проекції октаедра ?
Величезне дякую )
Буду розбиратись
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
Це ж алгоритм Z - буфера відсікання невидимих граней, правильно ?
Дуже дякую )
Можливо, хтось ще знає функцію для зафарбовування граней ?
вже не актуально.
Списки переписав в масиви.
І на масивах реалізував додавання, проходом з кінця на початок.
Усім дякую )
Привіт усім.
Підкажіть, будь ласка, алгоритм чи код побудови октаедра в OpenGL.
А в чому по вашому різниця між багатоцифровими і небагатоцифровими числами в термінах польського інверсного запису?
та я не знаю ))
Просто на просторах Інтернету зустрічав лише дії над цифрами.
Де поміщали перший операнд у стек, потім другий і після цього виконували дію.
А з багатоцифровими числами просто хочу уточнити: потрібно просто перше число повністю помістити у стек, потім друге і опісля просто виконати додавання/віднімання цих чисел ? Чи як ?
Чи для такої однієї дії взагалі нераціонально використовувати даний запис ?
Мене зацікавив даний спосіб запису операцій. Читаючи про нього, так і не зрозумів як би можна було подати додавання чи віднімання багатоцифрових чисел. Наприклад: 16846 + 3116.
і як Ви вважаєте, коли його доцільно використовувати?
Ви вкрай невдало вибрали структуру для збереження інформації.
По суті: вам треба взяти останні елементи двох списків, скласти їхні значення, записати результат (за модулем 10) в останній елемент нового списку. Потім взяти ПЕРЕДостанні елементи... ви вже побачили проблему?
я дійду до останього елементу у списку, але потім повернутись назад не зможу ж, оскільки в мене однонапрямлений список.
а повернутись назад мені потрібно в будь-якому випадку.
як би це обійти, крім двозв'язного списку?
Усім привіт.
Прошу Вас допомогти у вирішенні такого завдання :
я створив клас Довге ціле число , для збереження числа використав лінійний однонапрямлений список .
struct Digit {
short a;
Digit *next;
};
class LongDigit {
Digit *head;
short len;
public:
LongDigit();
LongDigit(char*, short);
LongDigit(const LongDigit&);
~LongDigit();
LongDigit& operator=(const LongDigit&);
void input ();
void print();
inline friend int GetLen(const LongDigit);
void ifNULL();
void normalyze();
friend LongDigit operator+ (const LongDigit, const LongDigit);
friend LongDigit operator- (const LongDigit, const LongDigit);
};
LongDigit::LongDigit(){
head = NULL;
len = 0;
cout << "\nConstruktor default\n";
}
LongDigit::LongDigit(char *ch, short n){
len = n;
head = new Digit;
if(len) {
short tmp;
Digit *end = head;
for(int i = 0; i < len; i ++) {
tmp = ch[i] - '0';
end->a = tmp;
if(i != len - 1) {
end->next = new Digit;
end = end->next;
}
}
end->next = NULL;
}
else {
head->a = 0;
head->next = NULL;
}
cout << "\nConstructor with parameters\n";
}
LongDigit::LongDigit(const LongDigit &ob) {
len = ob.len;
if(len) {
head = new Digit;
Digit *end = head;
Digit *tmp = ob.head;
for(int i = 0; i < len; i ++) {
end->a = tmp->a;
if(i != len - 1) {
end->next = new Digit;
end = end->next;
}
tmp = tmp->next;
}
end->next = NULL;
}
else
head = NULL;
cout << "copy construktor\n";
}
LongDigit::~LongDigit(){
if(len) {
Digit *end = head;
Digit *tmp;
while(end) {
tmp = end->next;
delete end;
end = tmp;
}
delete head;
len = 0;
cout << "\nDestruktor worked\n";
}
}
LongDigit& LongDigit::operator=(const LongDigit &ob) {
len = ob.len;
if(len) {
Digit *end = head;
Digit *tmp;
while(end) {
tmp = end->next;
delete end;
end = tmp;
}
delete head;
/* ********************************************** */
head = new Digit;
Digit *h = head;
end = ob.head;
do {
h->a = end->a;
h->next = new Digit;
h = h->next;
end = end->next;
}
while(end);
h = NULL;
}
return *this;
}
void LongDigit::input() {
cout << "Введіть кількість цифр у числі\n";
cin >> len;
head = new Digit;
if(len) {
cout << "Введіть число\n";
char *ch = new char[len];
short tmp;
cin >> ch;
Digit *end = head;
for(int i = 0; i < len; i ++){
tmp = ch[i] - '0';
end->a = tmp;
if(i != len - 1) {
end->next = new Digit;
end = end->next;
}
}
end->next = NULL;
delete ch;
}
else {
head->a = 0;
head->next = NULL;
}
}
void LongDigit::print(){
cout << "\n*** Output ***\n";
if(len){
Digit *end = head;
while(end) {
cout << end->a;
end = end->next;
}
cout << endl;
}
else
cout << "0\n";
}
void LongDigit::ifNULL() {
cout << "\n*** If NULL ***\n";
if(head == NULL)
cout << "Число дорівнює нулю!\n";
else if(head->a == 0 && head->next == NULL) {
cout << "Число дорівнює нулю!\n";
}
else
cout << "Число не дорівнює нулю!\n";
}
int GetLen(LongDigit ob) {
return ob.len;
}
void LongDigit::normalyze() { // відкидання нулів на початку
if(len == 0 || len == 1)
return;
Digit *end = head;
short flag = 0;
for(int i = 0; i < len; i ++) {
if(end->a == 0){
end = end->next;
}
else{
flag = 1;
break;
}
}
if(flag == 1) {
short count = 0; // лічильник для підрахунку видалених елементів
for(int i = 0; i < len; i ++) {
if(head->a == 0) {
end = head->next;
delete head;
head = end;
count ++;
if(head->a != 0)
break;
}
}
len -= count; // становлення правильного розміру числа після видалення нулів
}
else {
Digit *tmp;
end = head->next;
while (end != NULL){
tmp = end->next;
delete end;
end = tmp;
}
head->next = NULL;
delete tmp;
len = 1;
}
}
Тобто число розбите по розрядах.
І тепер мені потрібно перевизначити оператор додавання для цього класу, а як це зробити - важко собі уявляю, тому надіюсь на Вашу допомогу.
ОСь я дописав:
Створив кнопку, тсрічку вводу для n і для кнопки написав такий код ?
Він відповідає умові задачі :?
float x = 0, y = 0, x1, x2, y1, y2;
int i, n = StrToInt(Edit1 -> Text);
for(i = 0; i < n; i++)
{
// лівий верхній кут і правий нижній координати
Form1->Canvas->Rectangle(x1 = 200 + x, y1 = 300 + y, x2 = 825 - x, y2 = 325 + y);
y += 25;
x += 0.1 * (x2 - x1);
Form1->Canvas->Brush->Color = (TColor)RGB(rand() % 255, rand() % 255, rand() % 255);
}
Усім привіт.
Ось наткнувся на таку задачу: потрібно вивести на екран різнокольорову дитячу пірамідку з n (ми його вводимо) прямокутників, кожен з яких зменшується від попереднього на 10%.
Почав шукати в І - неті теорію, оскільки тільки почав пізнавати С++ і графіку.
трішки коду написав, але він лише створює прямокутник і окрашує його в червоний колір.
Допоможіть, будь ласка, з кодом або теорією, що б допомогла мені з цією задачею
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = StrToInt(Edit1->Text);
Form1->Canvas->Rectangle(10, 10, 110, 110);
Canvas->Brush->Color = clRed;
Form1->Canvas->FloodFill(15, 15, clRed, fsSurface);
}
всім привіт..
От ніяк не можу вирішити задачу, будь ласка, допоможіть довести код до коректного вигляду.
Відомо, що в школі N класів (15≤N≤20) і в кожному класі навчається по 30 учнів. Підсумковий результат з математики (сума всіх оцінок за семестр) учнів всієї школи виписаний у вигляді таблиці розміром N*30, де кожний рядок це підсумкові оцінки учнів даного класу з математики відповідно до списку в класному журналі. Визначити порядкові номери учнів у кожному класі, які мають найкращі та найгірші підсумкові бали з математики. Визначити також найкращих та найгірших учнів по всій школі.
буду дуже вдячний за будь- яку допомогу
Сторінки 1