![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Ner-zul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 24.1.2004 Где: Москва Репутация: нет Всего: нет |
Пусть у меня есть переменная типа long int t;
Допустим я выщитываю расстояния от заданной точки до второй движущейся в плоскости размером 600 на 400 пикселей(и где-то у себя в программе использую это расстояние ) по формуле: t=dx*dx+dy*dy (ну то есть t- это квадрат расстояния) И вот в процессе движения у меня получается что переменная t принимает черт знает какие значения, в том числе и отрицательные Сначала у меня t - было типа int и я исправил на long int, что-то изменилось но в целом это не помогло!?? Помогите пожалуйста!!!Бьюсь головой о клаву уже второй день!!! (P.S. если хотите я выложу код своей программки) --------------------
Ner-zul |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
используй unsigned int или unsigned long и твои отрицательные числа пропадут
|
|||
|
||||
| Paradox |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1135 Регистрация: 18.11.2002 Где: Россия Репутация: нет Всего: 1 |
Код в студию -------------------- --- |
|||
|
||||
| Ner-zul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 24.1.2004 Где: Москва Репутация: нет Всего: нет |
1)Я использовал и int и long int и unsigned long int (можно правда long double еще попробовать!!!)-во всех случаях прога глючит!!!
2)Я знаю и сам проверял что все значения "влезают" в long int, но почему-то все равно отрицательные вылезают!!! unsigned long int a; unsigned long int b; unsigned long int a2; unsigned long int b2; unsigned long int kkk; ... int x=320; int y=240; int dxp=300; int dyp=400; ... a=dxp-x; b=dyp-y; a2=a*a; b2=b*b; t=a+b; kkk=600*400; ... printf("%li %li %li %li %li %li ",a,b,a2,b2,t,kkk); ... Точка с координатами x,y - движется;стока переменных создал чтобы проверит где именно глючит;переменная kkk- просто так для проверки(она кстати равна - 2****- ну то есть отрицательная) HELP!!! HELP!!! HELP!!! --------------------
Ner-zul |
|||
|
||||
| bel_nikita |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
в этой сточке утебя проблема
у тебя получается -20, но так как unsigned, то а=FFFFFFECh. вроде бы так |
||||
|
|||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
что значит %li?
%i - знаю. |
|||
|
||||
| Ner-zul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 24.1.2004 Где: Москва Репутация: нет Всего: нет |
1)да но когда было все просто long int точно так же глючило!
2)%li - вроде так надо писать в printf когда хочешь вывести переменную типа long int( я в учебнике смотрел) %i - просто int. --------------------
Ner-zul |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
Ner-zul
все правильно, мне кажется, у тебя ошибка в самом алгоритме вычисления я не знаю, что ты вычесляешь, но кажется тебе надо добавить деление по модулю 2 (%320) это, типа, если у тебя точка вылезает за границу (у тебя эта граница= 320) и ты хочешь отобразить ее вновь вообщем у тебя движется точка в право. дошла до границы 320 и ты должен отобразить ее, но так как ты уже вылез за границу видимости ты должен отобразить ее уже с нуля. если это так то добавь a=(dxp-x)%320 или a=(dxp-x)&320, что выглядет красивее понял? аль нет? |
|||
|
||||
| Ner-zul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 24.1.2004 Где: Москва Репутация: нет Всего: нет |
Я понял что ты мне предлагаешь! и это хорошо но у меня дело в другом:
Я хочу написать подобие арканоида... И щас у меня решается вопрос как отработать соударения шарика с углами и о концы управляемой перекладины(а в углах и на концах точки) и чтобы оnследить момент ударения я рассчитываю расстояние от центра шара до той точки о которую он ударится и отобьется, и когда расстояние между этими точками равно радиусу то я зоставляю шарик двигаться в обратном напрвлении ... вот такое простое условие и такая неразрешимая проблема... как я уже говорил это расстояние глючит по страшному и шарик начинает отражаться от всего чего только хочет!!! забавно и грустно.... --------------------
Ner-zul |
|||
|
||||
| bel_nikita |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Эксперт Сообщений: 2304 Регистрация: 12.10.2003 Где: Поезд №21/22 ( ст . Прага ) Репутация: 21 Всего: 47 |
ну, это надо на код смотреть, точнее на алгоритм вычисления
вычесление:
у тебя число отрицательное получается вообще, что такое а? |
|||
|
||||
| Ner-zul |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 24.1.2004 Где: Москва Репутация: нет Всего: нет |
1)Ну формула такая : r*r=(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)
2)а = x1-x2(это я формулу на несколько переменных разделил чтобы найти где глючит) 3)Даже если разность отрицательная то а*а всегда положительное!==> r*r всегда положительное. --------------------
Ner-zul |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |