Припустимо два трикутники з індексами вершин

1,2,3
3,2,1

Як мені швидко порівняти два трикутники, що вони мають ті самі вершини, але дивляться в різні боки?

І як це зробити швидко *SCRATCH*

РЕДАГОВАНО:
дивляться в різні боки означає, що в другого вершини йдуть в іншому порядку ніж у першого.

862

(10 відповідей, залишених у C++)

Чому реверс, чому догори - у першій половині вершина з меншим індексом перша, у другій з більшім.

863

(10 відповідей, залишених у C++)

miroslav.chandler написав:

нашо я це прочитав? чому ця тема не видалена?

Може у вас є краща ідея щодо назви, буду вдячний. Express yourself!

864

(10 відповідей, залишених у C++)

Маю масив вершин із суміжними до них, тобто кожний елемент масиву описує ребро. Масив відсортований по першій вершині і містить дублікат кожного ребра. тобто пари a:b i b:a.

також є масив кольорів, довжина якого вдвічі менша. він називається m_ConstraintsColors.

Як мені назвати масив з дублікатами?

зі. шось крутиться у голові про orderedVerticesPairs. Мінус, якщо так назвати тоді змінна в циклі буде orderedVerticesPairIndex - задовга, наче. Та й це не просто пара, це саме пара з constraint'а.

зіі. Хо-хо-хо, щойно пішов запитувати в людей, і поки розповідав зрозумів, що цей список, який створювався як список суміжності, можна назвати adjacencyList:)!

865

(1 відповідей, залишених у Windows)

На жаль, Google Chrome не вдалося з'єднатися зі сторінкою uk.wikipedia.org

А у Firefox все добре, це може бути пов'язано з тим що вони по різному працюють з проксями? може мені забанили uk.wikipedia.org, але Firefox якось це обходить?

866

(4 відповідей, залишених у C++)

Вставте     

printf("%d", (int)op);

після зчитування операції і ви побачите, що ви зчитали перехід на новий рядок.

на

git clone git://gitorious.org/qt/qt.git

отримую

fatal: unable to look up gitorous.org (port 9418) (No such host is known.)

спробував з під звичайної консолі

git clone git://gitorious.org/qt/qt.git
Cloning into 'qt'...
fatal: unable to connect to gitorious.org:
gitorious.org[0: 87.238.52.168]: errno=No error

А на bitbucket створив репозиторій все нормально. Може вони не віддають сирці просто так.

868

(5 відповідей, залишених у C++)

я запитував про float=)

поки що так

static float s_NaN     = std::numeric_limits<float>::quiet_NaN();
static float s_Infinite = std::numeric_limits<float>::infinity();

а от чи можна якось поділити на 0 цікаво.

869

(11 відповідей, залишених у C++)

Bartash написав:

Від архітектури та ОС. Ключ - у розрядності.

Хм.. За певну суму я можу написати компілятор у якого розмір інта буде 128 біт як на 32 так і на 64 розрядній системах. Те що компілятори зазвичай підлаштовуються під систему, то інше. Гадаю у них є опції для розміру інта.

870

(5 відповідей, залишених у C++)

#include <float.h>

void main()
{
  f = ?;
  _isnan(f);
}

Чому має дорівнювати f?

0. / 0.

видає помилку

error C2124: divide or mod by zero

871

(11 відповідей, залишених у C++)

Replace написав:

Короче кажучи це все залежить від ОС та архітектури =)

Я б сказав - від компілятора=))
--------------------------------------------------------------------
Також того, щоб дізнатись межі типу можна використати

#include <limits>
const int min_int = std::numeric_limits<int>::min();
const int max_int = std::numeric_limits<int>::max();

872

(4 відповідей, залишених у C++)

Наче від вас не вимагають сортування слів, ви просто в циклі по літері, проходите рядок і кожен раз коли закінчується слово, збільшуєте відповідний лічильник.

Припустимо ви знаєте, що максимальна довжина слова 10, тоді

int counters[10];

також ви зберігаєте довжину поточного слова

int currentWordLen = 0;

в циклі ви читаєте символи по одному і збільшуєте currentWordLen з кожним символом, якщо символи належать до таких, що не можуть бути в слові і currentWordLen не нуль - робите counters[currentWordLen - 1]++;

---
звісно, можлива ситуація, що довжина слова перевищить 10, але ви спочатку зробіть цю версію, а потім подумаємо далі.

---
Перечитав умову, дійсно вимагають, недогледів:(

873

(4 відповідей, залишених у C++)

А як ви читаєте рядок в якій він у вас формі. Покажіть, що ви вже спробували.

Використайте цикл для проходження по рядку, виберіть умову закінчення слова і кожен раз при виконанні такої умови збільшуйте відповідний лічильник. Лічильники можуть бути в масиві.

Bartash написав:

Yola, цей варіант створить вам екзешник та дві статичні бібліотеки, як включаться до екзешника як складові. Якщо вам треба отримати все ж DLL-ки, пошукайте у студії, де задати опції лінкера (Linking options, parameters чи якось так) і там пропишіть у якості параметрів

-lMyCoolLibrary1 -lMyVeryCoolLibrary2

.

варіант зі статичними бібліотеками мене поки що влаштовує, гадаю це значно спростить зневадження.

Очі.завидющі написав:

Як варіант:

#pragma comment(lib, "libname.lib")

Угум, це те саме, що я не хотів робити через Linker->Input->Additional libraries :)

Добре, відповідь знайшлась)

Правий клац на EXE проекті, Properties, Common Properties, Framework and References. Клац на Add New Reference і вибрати проект, який генерує .lib.

Також це забезпечить порядок збирання проектів, щоб вони збирались не паралельно, а відповідно до цих залежностей.

Та я просто зібрати проект не можу, видає помилки зв'язувальника на кшталт:

3>Renderer_PC32_d.lib(Renderer.obj) : error LNK2019: unresolved external symbol "public: __thiscall GrDr_VertexBufferImmutable::GrDr_VertexBufferImmutable(unsigned int,void const *)" (??0GrDr_VertexBufferImmutable@@QAE@IPBX@Z) referenced in function "private: void __thiscall Renderer::CreateCube(struct Renderer::VertexBuffer &)" (?CreateCube@Renderer@@AAEXAAUVertexBuffer@1@@Z)
3>Renderer_PC32_d.lib(Renderer.obj) : error LNK2019: unresolved external symbol "public: static void __cdecl GraphicsDriver::Create(struct GraphicsDriverParam const *)" (?Create@GraphicsDriver@@SAXPBUGraphicsDriverParam@@@Z) referenced in function "public: void __thiscall Renderer::Initialize(struct HWND__ *)" (?Initialize@Renderer@@QAEXPAUHWND__@@@Z)
3>Bin\Basement.exe : fatal error LNK1120: 2 unresolved externals

Я прямо вказав де лежить бібліотека через Властивості проекту і все запрацювало, але гадаю, що це неправильний варіант, бо інший проект робить якось інакше, але я не можу знайти як.

VS 2010, VC++.

У мене є Solution з трьох проектів. Один виконуваний і два бібліотеки.

Як мені вказати. щоб виконуваний знав де брати ці бібліотеки?

Так, я можу це зробити через Linker->Input->Additional libraries, але гадаю, що існує інший спосіб. якщо проекти в одному рішенні.

878

(388 відповідей, залишених у Алгоритми та структури даних, технології)

Загалом, відповідь така, розвертаємо зображення так щоб дві лінії були горизонтальні або вертикальні і застосовуємо скошення.

879

(388 відповідей, залишених у Алгоритми та структури даних, технології)

маємо аркуш паперу, сфоткали його, але фотік був трошки відхилений. Отже аркуш трохи скошений, як вирахувати трансформацію, яку треба застосувати, щоб зробити наче його сфоткали прямовисно по центру?

Я відповіді не знаю, вигадуватиму по ходу:)

ДОПОВНЕННЯ:
вихідна світлина з аркушем
(0,0), (w,0)
(0,h), (w,h)
сирцева
(a1,b1),(a2,b2)
(a3,b3),(a4,b4)

b4,b3>b2,b1
a2,a4>a1,a3

Увага, трансформація 3-вимірна, просто повернути зображення недостатньо, гадаю треба буде після повороту масштабувати з осями від кутка до кутка. Овва, поки так собі розмірковував і рішення проглянуло :-) Дійсно і масштабування потребуватиметься одненьке. А, ні, потім ще загальний скейл до заданого масштабу.

Вибачаюсь нєа, масштабуванням скошеність не подолаєш((

880

(388 відповідей, залишених у Алгоритми та структури даних, технології)

koala написав:

Непогано, але є рішення без тригонометрії:

Прихований текст
d = b / a;
c = a * sqrt( 1 + d * d ) ;

b - дуже велике
a - дуже маленьке

ділення - це те саме, що множення