forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   кубик рубика (http://forum.boolean.name/showthread.php?t=13791)

WhiteBlack 06.12.2010 15:17

Ответ: кубик рубика
 
Цитата:

Сообщение от Crayzi (Сообщение 171041)
если хош глобальную координату то EntityX#(cubes(5),True), есди локальную то EntityX#(cubes(5),False).

пробовал , не помогает он все равно разваливается через несколько поворотов:4to:

RBK 06.12.2010 16:31

Ответ: кубик рубика
 
Вероятно проблема с файлом rubik.3DS

Если убрать 26 кубиков, то видно что на нижней плоскости в середине один лишний кубик.

Но главное центр кубика расположен на его нижней гране, поэтому даже в одном и том-же месте у кубика могут быть разные координаты, в зависимости от поворота

WhiteBlack 06.12.2010 19:04

Ответ: кубик рубика
 
Цитата:

Сообщение от RBK (Сообщение 171119)
Вероятно проблема с файлом rubik.3DS

Если убрать 26 кубиков, то видно что на нижней плоскости в середине один лишний кубик.


спасибо, если честно я не понимаю откуда он взялся

Цитата:

Сообщение от RBK (Сообщение 171119)
Но главное центр кубика расположен на его нижней гране, поэтому даже в одном и том-же месте у кубика могут быть разные координаты, в зависимости от поворота

да действительно, когда создавал модельку, поставил центральному кубику координаты 0, 0, 0 и забыл, что в Блитце идет отсчет от центра:mad:
сейчас попробую исправить

WhiteBlack 06.12.2010 19:21

Ответ: кубик рубика
 
Вложений: 1
Поставил координаты от центра, удалил лишний кубик, но ничего не изменилось:dontknow:

RBK 06.12.2010 20:31

Ответ: кубик рубика
 
Изменились только координаты всей группы кубиков. При загрузке ты отделяешь кубик от всей группы. Но центр каждого маленького кубика все равно в середине нижней грани после отсоединения. Поэтому ничего не изменилось.

WhiteBlack 06.12.2010 22:24

Ответ: кубик рубика
 
Цитата:

Сообщение от RBK (Сообщение 171169)
Изменились только координаты всей группы кубиков. При загрузке ты отделяешь кубик от всей группы. Но центр каждого маленького кубика все равно в середине нижней грани после отсоединения. Поэтому ничего не изменилось.

блин странно, в максе координаты у каждого кубики были от центра, я все 26 проверил:4to:
ну хорошо пробую еще раз

WhiteBlack 06.12.2010 22:46

Ответ: кубик рубика
 
RBK, скажи пожалуйста, как ты определяешь, где находится центр у фигуры в Блитце, просто каждый раз выкладывать архив для проверки, я думаю это вам неприкольно.

RBK 06.12.2010 23:08

Ответ: кубик рубика
 
Я из кусков твоей программы сделал тестовую программу в которой поочередно вращаются маленькие кубики.
Вот это исправление загрузит кубики правильно:

Код:

Function FindAllKubes(mesh)

Local temp

  For i=1 To 26
    temp=FindChild(mesh, "Box"+i) ;ищем кубик
    EntityParent(temp, 0) ;отсоединяем
    cubes(i)=CreatePivot();Создаем центр для кубика

    ;Ставим туда где должен быть центр
    PositionEntity cubes(i), EntityX(temp), EntityY(temp)+10, EntityZ(temp)
               
    EntityParent(temp, cubes(i)) ;подсоединяем кубик

  Next
 
End Function


WhiteBlack 07.12.2010 12:59

Ответ: кубик рубика
 
Цитата:

Сообщение от RBK (Сообщение 171204)
Я из кусков твоей программы сделал тестовую программу в которой поочередно вращаются маленькие кубики.
Вот это исправление загрузит кубики правильно:

Код:

Function FindAllKubes(mesh)

Local temp

  For i=1 To 26
    temp=FindChild(mesh, "Box"+i) ;ищем кубик
    EntityParent(temp, 0) ;отсоединяем
    cubes(i)=CreatePivot();Создаем центр для кубика

    ;Ставим туда где должен быть центр
    PositionEntity cubes(i), EntityX(temp), EntityY(temp)+10, EntityZ(temp)
               
    EntityParent(temp, cubes(i)) ;подсоединяем кубик

  Next
 
End Function


странно, но это ничего не изменило, хотя идея хорошая, спасибо за мыслю:)

RBK 07.12.2010 14:01

Ответ: кубик рубика
 
Чтобы вращать весь куб или его часть нужен всего один пивот.
Код:

piv=CreatePivot();Создаем пивот для вращения
;Ставим в середину всего блока
PositionEntity piv, EntityX(cubes(5)), EntityY(cubes(10)), EntityZ(cubes(5))

Центры кубиков теперь не прыгают и нужно просто сравнить координаты чтобы найти нужные.Дальше найденные кубики присоединяем к piv. Вращаем piv в нужную сторону, отсоединяем кубики.

WhiteBlack 07.12.2010 17:18

Ответ: кубик рубика
 
Цитата:

Сообщение от RBK (Сообщение 171241)
Центры кубиков теперь не прыгают и нужно просто сравнить координаты чтобы найти нужные.Дальше найденные кубики присоединяем к piv.

хочешь сказать, что присоединять нужно кубики? или пивоты, к которым приперэнтины кубики??
просто я попробовал к piv присоединял пивоты центральные и все равно разваливается :4to:
может все таки ошибка где-то в логике? или ты говорил, что использовал где то мой код, там работало, да?:crazy:

RBK 07.12.2010 18:42

Ответ: кубик рубика
 
Я только сейчас заметил что ты переписал функции во втором варианте.
Зачем все так усложнять? Значение MaxY, MaxX и другие нужно определить только раз, в самом начале, а потом использовать.

Да присоединяй к piv центральные пивоты

WhiteBlack 07.12.2010 22:51

Ответ: кубик рубика
 
Цитата:

Сообщение от RBK (Сообщение 171275)
Я только сейчас заметил что ты переписал функции во втором варианте.
Зачем все так усложнять? Значение MaxY, MaxX и другие нужно определить только раз, в самом начале, а потом использовать.

да точно спасибо:super: , только это ничего не меняет:4to: :crazy: :4to:

вся проблема в координатах: у кубиков (теперь уже у пивотов) после поворота больше чем на 270 градусов (во время четвертого поворота) появляются непонятные координаты, это глюк Блица?!
(я решил проверить, взял просто кубик присоединил его к пивоту и повернул пивоту на 90 градусов, координаты кубика были (-5; 0; 5),а стали равны (5,96046е-007; 0; -4,76837Е-007) - ЧТО ЭТО??????
как с этим справиться?

Dream 08.12.2010 01:00

Ответ: кубик рубика
 
координаты глобальные берёшь?

RBK 08.12.2010 03:30

Ответ: кубик рубика
 
Цитата:

Сообщение от WhiteBlack (Сообщение 171306)
да точно спасибо:super: , только это ничего не меняет:4to: :crazy: :4to:

вся проблема в координатах: у кубиков (теперь уже у пивотов) после поворота больше чем на 270 градусов (во время четвертого поворота) появляются непонятные координаты, это глюк Блица?!
(я решил проверить, взял просто кубик присоединил его к пивоту и повернул пивоту на 90 градусов, координаты кубика были (-5; 0; 5),а стали равны (5,96046е-007; 0; -4,76837Е-007) - ЧТО ЭТО??????
как с этим справиться?

Проблема в том что координаты объектов заданы типом Float. Поворот не совсем точная операция, поэтому возможен разброс в несколько десятых.

Равенство двух чисел типа Float проверяют так:
if Abs(A#-B#) < (величина возможного разброса)

если условие выполняется числа A# и B# равны.


Часовой пояс GMT +4, время: 10:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot