Автор Тема: Идея семи-осника  (Прочитано 8062 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 257
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
Re: Идея семи-осника
« Ответ #15 : 20 июля 2023, 18:53:54 »
pCube разумеется поддерживает джамблинг.
чтобы более менее нормально все освоить наверно надо 2-4 недели.
тк его скрипты это почти полноценный язык программирования.

нужно описать форму (задавая точками все грани многоугольника)
потом оси и углы поворотов. плоскости сечения. потом нарезать все и тестировать...
сложного нет ничего особо... следующий этап внутренние программы освоить.

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 210
Re: Идея семи-осника
« Ответ #16 : 20 июля 2023, 22:52:06 »
Ага, pCubes скачал, размер библиотеки головоломок впечатлил.
Пока только понял как добавить в меню новую головоломку. Изучаю код Curvy Jumble Prism Plus, мне кажется там есть похожие нужные мне фишки включая доп разрезы. Жаль правда, что пока что разрезы только прямые) Правда я понимаю, учитывая количество принципиально разных головоломок, какой гемор поддерживать такое разнообразие.

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 210
Re: Идея семи-осника
« Ответ #17 : 22 июля 2023, 00:06:23 »
Еее, я наконец-то смог нарисовать граф в ТРИДЭ

Это не какие-то каракули из пэинта

А у бум-бум-бряма система осей другая:


Гифки по 2 мегабайта каждая - убрать по ссылке?
« Последнее редактирование: 22 июля 2023, 00:17:29 от T4r4sB »

Оффлайн myth

  • Постоялец
  • ***
  • Сообщений: 107
  • Пол: Мужской
  • ---я вернулся?---
Re: Идея семи-осника
« Ответ #18 : 25 июля 2023, 13:15:00 »
День добрый.

Чуть изменил скрипт у Дино и сделал  гифку.
https://vk.com/doc258443948_664234494?hash=hJJmxlS09I4YatXgtuZ5m1sx10O05i7QzDC5uYVvlA0&dl=RHUKjpV845Wpn8scC6xTl3P7xLlclHIWzF1I6JO9CE4
https://vk.com/doc258443948_664234829?hash=d7FgJZAJnL4WTJsRYu3XCBtqnJ8F7hQLzT3OU8tRBw8&dl=wfMOWDntG5SYs2i7ZuJR8Szqze8tyqBVD1zuSPSjuBw
https://vk.com/doc258443948_664234925?hash=TvuKvib47N4sCDTVWWUTm9Nm4L5kZQtYfgrW5eechvT&dl=ZHO7fSwnQEX1uI3AZa1Oq75Y8eYZBRHZ0cl1jJrlGI4

При прямых плоскостях не получается imho. Слои будет крутить над этой новой точкой, которая вместо пары.
Но может ошибаюсь.

Спасибо, удачи.

P.S.
<?xml version = "1.0" encoding = "UTF-8"?>
<xml Data_Version = "2" >

    <Interface>
        <Name>Dino Cube</Name>
        <Menu>Other cubes\Vertex Turning\Dino Cube</Menu>
        <Inventor>Aleksandr Ordynets</Inventor>
        <Programmer>Skallos</Programmer>
        <Added>2016-01-12</Added>
        <Link>http://twistypuzzles.com/cgi-bin/puzzle.cgi?pkey=605</Link>
    </Interface>

    <Script>
        W := 0.5;
        D := W / sqrt(3);
    </Script>

    <Axes TurningAngles = "Pi * 2 / 3" PlaneDistances = "-D; D" FixedLayers = "1" >
        <Axis NormVector = "-1;-1;-1" />
        <Axis NormVector = " 1; 1;-1" />
        <Axis NormVector = " 1;-1; 1" />
        <Axis NormVector = "-1; 1; 1" />
    </Axes>
    <Axes TurningAngles = "Pi * 2 / 3" PlaneDistances = "0" FixedLayers = "1" >
        <Axis NormVector = " 1; 1; 0" />
    </Axes>

    <Figure>
        <LoadFrom File = "Figures\Cube.xml" />
        <SplitByAxes/>
        <Hide  Axis = "4" To = "0" />
<!--
-->
    </Figure>
</xml>

P.P.S. Не, слишком сложно, что-то не понимаю и не то могу советовать. Извиняюсь.
« Последнее редактирование: 25 июля 2023, 13:37:42 от myth »

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 210
Re: Идея семи-осника
« Ответ #19 : 25 июля 2023, 23:21:57 »
        <Axis NormVector = "-1;-1;-1" />
        <Axis NormVector = " 1; 1;-1" />
        <Axis NormVector = " 1;-1; 1" />
        <Axis NormVector = "-1; 1; 1" />
        <Axis NormVector = " 1; 1; 0" />
Ну что это за нормали такие, я как будто зря вообще числа говорил   >:(
https://i.ibb.co/3YqVW84/screen.png
В pCubes забивается как есть, только запятую заменить на точку с запятой
В общем оси я задал, в форме куба это не очень содержательно получается, потому что надо таки задевать центры граней Супер Иви, надо кастомную форму задавать

Пока только красные рёбра сделал, и то без доп разрезов: https://ibb.co/vdYMQLb
Дальше изучать хитрые формы
« Последнее редактирование: 25 июля 2023, 23:55:09 от T4r4sB »

Оффлайн myth

  • Постоялец
  • ***
  • Сообщений: 107
  • Пол: Мужской
  • ---я вернулся?---
Re: Идея семи-осника
« Ответ #20 : 26 июля 2023, 10:32:25 »
День добрый.

А зачем Вам вообще кривые плоскости?
Ведь даже "Иви" моделируется с обычными, но надо будет просто убрать лишнее.
Берём только 4 угла и начинаем рассекать плоскостями, удаляя их всё дальше от вершин. Когда доходим плоскостями до трёх соседних углов, то получаем нечто похожее на Дино, ну половину его.
Продолжим отдалять плоскости разрезов, вот и получили "иви", но на углах дополнительный элемент вроде появится. Вот и всё отличие.

Есть такой пазл - "F-Skewb", у него как раз такое присутствует. 4 угла как "дино" разрезы, а другие 4 с разрезами как "скьюб". Тут как раз "допилено" до углов.


Есть также "Master F-Skewb", у которого ушли плоскости разрезов уже за углы. На фото как раз поворотом это выделено.


Это было про разницу разрезов прямыми и кривыми плоскостями, к Вашему проекту прямого отношения не имеет imho.

-upd-
Вообще не понимаю, зачем стремиться сделать похожее на реальный пазл в симуляторе, а не сделать модель нормальную?
Может кто-то реально сделает по такой модели пазл, там же больше элементов становится, собирать чуть дольше. :-)

P.S. Нашёл ещё один пазл, упоминал в этом сообщении.
« Последнее редактирование: 26 июля 2023, 11:31:25 от myth »

Оффлайн myth

  • Постоялец
  • ***
  • Сообщений: 107
  • Пол: Мужской
  • ---я вернулся?---
Re: Идея семи-осника
« Ответ #21 : 26 июля 2023, 10:38:53 »
        <Axis NormVector = "-1;-1;-1" />
        <Axis NormVector = " 1; 1;-1" />
        <Axis NormVector = " 1;-1; 1" />
        <Axis NormVector = "-1; 1; 1" />
        <Axis NormVector = " 1; 1; 0" />
Ну что это за нормали такие, я как будто зря вообще числа говорил   >:(

Это была модель Дино, 4 строки с начала, а затем для распиливания пополам параметры.

Мне показалось, что вращая видимые слои "Дино", мы ими над новой точкой и ее плоскостями пролетаем, зазоры там будут.
Видимо разрезы надо отдалять от углов подальше, как уже написал с примерами?
« Последнее редактирование: 26 июля 2023, 11:37:14 от myth »

Оффлайн myth

  • Постоялец
  • ***
  • Сообщений: 107
  • Пол: Мужской
  • ---я вернулся?---
Re: Идея семи-осника
« Ответ #22 : 26 июля 2023, 16:47:44 »
Сделал в pCubes похожее тело, скорее-всего не оно, нарезал "от балды, посмотреть что бы было на что.

Вот пазл:
<?xml version = "1.0" encoding = "UTF-8"?>
<xml Data_Version = "2" >
<Interface>
<Name>Dino Cube v??</Name>
<Programmer>htym@mail.ru</Programmer>
<Added>2023-07-26</Added>
</Interface>
<Script>
W := 0.5;
D := W / sqrt(3);
dD:= D - 1*D/1.00
</Script>
<Axes TurningAngles = "Pi * 2 / 3" PlaneDistances = "-dD; dD" >
<Axis NormVector = "-1;-1;-1" />
<Axis NormVector = " 1; 1;-1" />
<Axis NormVector = " 1;-1; 1" />
<Axis NormVector = "-1; 1; 1" />
</Axes>
<Axes TurningAngles = "Pi * 2 / 3" PlaneDistances = "-dD; 0; dD" >
<Axis NormVector = "0.5; 0.5; 0" />
</Axes>
<Figure>
<LoadFrom File = "Figures_new\Cube-7os.xml" /><SplitByAxes/>
    </Figure>
</xml>

А ниже шаблон, на базе Cube (File = "Figures_new\Cube-7os.xml"):
<?xml version = "1.0" encoding = "UTF-8"?>
<xml>
<Script>
if not VarExists('Colors[0]') then begin
clRed := 'C80000'; clOrange := 'FF800A'; clBlue := '0000C8'; clGreen := '009600'; clYellow := 'FFFF00'; clWhite := 'FFFFFF';
Colors[0] := clRed; Colors[1] := clOrange; Colors[2] := clBlue; Colors[3] := clGreen; Colors[4] := clYellow; Colors[5] := clWhite; Colors[6] := '00DCB4'; Colors[7] := '3868BF';
        end;
        if not VarExists('W') then
          W := 1;
// Vertices (corners)
        Vx[0] := -W; Vy[0] := -W; Vz[0] := -W;
        Vx[1] := -W; Vy[1] := -W; Vz[1] :=  W;
        Vx[2] := -W; Vy[2] :=  W; Vz[2] := -W;
        Vx[3] := -W; Vy[3] :=  W; Vz[3] :=  W;
        Vx[4] :=  W; Vy[4] := -W; Vz[4] := -W;
        Vx[5] :=  W; Vy[5] := -W; Vz[5] :=  W;
        Vx[6] :=  W/2; Vy[6] :=  W/2; Vz[6] := 0;
</Script>
<Part>
<Vertices Vectors = "Vx; Vy; Vz" />
<Faces>
<Face Color = "Colors[0]" VertexIndexes = "0;1;3;2" />
<Face Color = "Colors[1]" VertexIndexes = "5;4;6" />
<Face Color = "Colors[2]" VertexIndexes = "1;0;4;5" />
<Face Color = "Colors[3]" VertexIndexes = "2;3;6" />
<Face Color = "Colors[4]" VertexIndexes = "0;2;4" />
<Face Color = "Colors[7]" VertexIndexes = "5;6;3" />
<Face Color = "Colors[5]" VertexIndexes = "1;5;3" />
<Face Color = "Colors[6]" VertexIndexes = "6;4;2" />
        </Faces>
 </Part>
</xml>

P.S. Забыл картинки, добавлю.


« Последнее редактирование: 26 июля 2023, 17:10:31 от myth »

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 210
Re: Идея семи-осника
« Ответ #23 : 26 июля 2023, 21:33:19 »
Сделал в pCubes похожее тело, скорее-всего не оно, нарезал "от балды, посмотреть что бы было на что.
...
   <Axis NormVector = "-1;-1;-1" />
   <Axis NormVector = " 1; 1;-1" />
   <Axis NormVector = " 1;-1; 1" />
   <Axis NormVector = "-1; 1; 1" />
Это обычный скьюб

Пока запилил без доп. разрезов. Задавать геометрию только ограничивающими плоскостями намного проще, чем высчитывать координаты вершин.
<?xml version="1.0" encoding="UTF-8"?>
<xml Data_Version="2">
    <Interface>
        <Name>SemiOsnik</Name>
        <Menu>Other forms\Unclassified\SemiOsnik</Menu>
        <Inventor>None</Inventor>
        <Programmer>T4r4sB</Programmer>
        <Added>2023-07-20</Added>
        <Link>http://twistypuzzles.ru/forum/index.php/topic,1260.0.html</Link>
    </Interface>

    <Script>
        clBlue   := '0000C8';
        clGreen  := '009600';
        clRed    := 'C80000';
        clYellow := 'FFFF00';
        clWhite  := 'FFFFFF';

        A3 := Pi * 2/3;
        A4 := arccos(1/4);

        W := 20.0;
        D := 0.55;
        S := 1.0;

        A00 :=  -sqrt(3)/3;           A01 := -sqrt(3)/3;           A02 := -sqrt(3)/3;
        A10 :=  -sqrt(3)/3;           A11 := -sqrt(3)/3;           A12 := +sqrt(3)/3;
        A20 :=  -sqrt(3)/3;           A21 := +sqrt(3)/3;           A22 := -sqrt(3)/3;
        A30 :=  -sqrt(3)/3;           A31 := +sqrt(3)/3;           A32 := +sqrt(3)/3;
        A40 :=  (sqrt(15)+sqrt(3))/6; A41 := (sqrt(15)-sqrt(3))/6; A42 := 0.0;
        A50 :=  +sqrt(3)/3;           A51 := -sqrt(3)/3;           A52 := -sqrt(3)/3;
        A60 :=  +sqrt(3)/3;           A61 := -sqrt(3)/3;           A62 := +sqrt(3)/3;
    </Script>

    <Axes TurningAngles = "A3" PlaneDistances = "D" >
        <Axis NormVector = "A00; A01; A02" />
        <Axis NormVector = "A10; A11; A12" />
    </Axes>
    <Axes TurningAngles = "0; 2*Pi" AvailableAngles = "0; A3; A4; -A3; -A4" PlaneDistances = "D" >
        <Axis NormVector = "A20; A21; A22" />
        <Axis NormVector = "A30; A31; A32" />
        <Axis NormVector = "A40; A41; A42" />
    </Axes>
    <Axes TurningAngles = "0; 2*Pi" AvailableAngles = "0; A3; A4; -A3; -A4; A3+A4; -A3-A4" PlaneDistances = "D" >
        <Axis NormVector = "A50; A51; A52" />
        <Axis NormVector = "A60; A61; A62" />
    </Axes>

    <Figure>
        <Part>
            <Vertices>
                <Add Vector = "-W; -W; -W" />
                <Add Vector = "-W; -W; +W" />
                <Add Vector = "-W; +W; -W" />
                <Add Vector = "-W; +W; +W" />
                <Add Vector = "+W; -W; -W" />
                <Add Vector = "+W; -W; +W" />
                <Add Vector = "+W; +W; -W" />
                <Add Vector = "+W; +W; +W" />
            </Vertices>

            <Faces>
                <Face Color = "DDEEFF" VertexIndexes = "0;1;3;2" />
                <Face Color = "DDEEFF" VertexIndexes = "0;4;5;1" />
                <Face Color = "DDEEFF" VertexIndexes = "0;2;6;4" />
                <Face Color = "DDEEFF" VertexIndexes = "6;7;5;4" />
                <Face Color = "DDEEFF" VertexIndexes = "3;7;6;2" />
                <Face Color = "DDEEFF" VertexIndexes = "5;7;3;1" />
            </Faces>
        </Part>
        <ShowAll/>
        <SplitByAxes/>
        <Cut Color = "FF4000" > <Plane NormVector = "-A00; -A01; -A02" NormDistance = "-S" /> </Cut>
        <Cut Color = "0040FF" > <Plane NormVector = "-A10; -A11; -A12" NormDistance = "-S" /> </Cut>
        <Cut Color = "40FF00" > <Plane NormVector = "-A20; -A21; -A22" NormDistance = "-S" /> </Cut>
        <Cut Color = "FFFF00" > <Plane NormVector = "-A30; -A31; -A32" NormDistance = "-S" /> </Cut>
        <Cut Color = "FFFFFF" > <Plane NormVector = "-A40; -A41; -A42" NormDistance = "-S" /> </Cut>
        <Cut Color = "FF8000" > <Plane NormVector = "-A50; -A51; -A52" NormDistance = "-S" /> </Cut>
        <Cut Color = "BBDDFF" > <Plane NormVector = "-A60; -A61; -A62" NormDistance = "-S" /> </Cut>
    </Figure>
</xml>

К сожалению, уже сейчас видно, что без небольшой "подушкообразности" пазл не сделать, есть висячие детали


Разрезы ближе к центру тоже нельзя, потому что они почти пересекаются на краях
« Последнее редактирование: 26 июля 2023, 21:37:15 от T4r4sB »

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 210
Re: Идея семи-осника
« Ответ #24 : 26 июля 2023, 23:41:53 »
Реализовал все разрезы.
Решил сделать в форме "подушки", чтоб детали никакие не торчали наружу. В программе очень не хватает функции не показывать ребра между некоторыми гранями. Например, если грани одного цвета и между ними угол меньше эпсилона.

<?xml version="1.0" encoding="UTF-8"?>
<xml Data_Version="2">
    <Interface>
        <Name>SemiOsnik</Name>
        <Menu>Other forms\Unclassified\SemiOsnik</Menu>
        <Inventor>None</Inventor>
        <Programmer>T4r4sB</Programmer>
        <Added>2023-07-20</Added>
        <Link>http://twistypuzzles.ru/forum/index.php/topic,1260.0.html</Link>
    </Interface>

    <Script>
        clBlue   := '0000C8';
        clGreen  := '009600';
        clRed    := 'C80000';
        clYellow := 'FFFF00';
        clWhite  := 'FFFFFF';

        A3 := Pi * 2/3;
        A4 := arccos(1/4);

        W := 20.0;
        D := 0.25;
        S := 0.6;

        P1 := 0.3;
        P2 := 0.5;

        A00 :=  -sqrt(3)/3;           A01 := -sqrt(3)/3;           A02 := -sqrt(3)/3;
        A10 :=  -sqrt(3)/3;           A11 := -sqrt(3)/3;           A12 := +sqrt(3)/3;
        A20 :=  -sqrt(3)/3;           A21 := +sqrt(3)/3;           A22 := -sqrt(3)/3;
        A30 :=  -sqrt(3)/3;           A31 := +sqrt(3)/3;           A32 := +sqrt(3)/3;
        A40 :=  +sqrt(3)/3;           A41 := -sqrt(3)/3;           A42 := -sqrt(3)/3;
        A50 :=  +sqrt(3)/3;           A51 := -sqrt(3)/3;           A52 := +sqrt(3)/3;
        A60 :=  (sqrt(15)+sqrt(3))/6; A61 := (sqrt(15)-sqrt(3))/6; A62 := 0.0;

        C0 := 'FFFF00';
        C1 := 'BBDDFF';
        C2 := 'FF4000';
        C3 := '0040FF';
        C4 := '40FF00';
        C5 := 'FF8000';
        C6 := 'FFFFFF';
    </Script>

   <Axes TurningAngles = "0; 2*Pi" AvailableAngles = "0; A3; -A3;" PlaneDistances = "D" >
        <Axis NormVector = "A00; A01; A02" />
        <Axis NormVector = "A10; A11; A12" />
    </Axes>
    <Axes TurningAngles = "0; 2*Pi" AvailableAngles = "0; A3; A4; -A3; -A4; A3+A4; -A3-A4" PlaneDistances = "D" >
        <Axis NormVector = "A20; A21; A22" />
        <Axis NormVector = "A30; A31; A32" />
        <Axis NormVector = "A40; A41; A42" />
        <Axis NormVector = "A50; A51; A52" />
    </Axes>
    <Axes TurningAngles = "0; 2*Pi" AvailableAngles = "0; A4; -A4" PlaneDistances = "D" >
        <Axis NormVector = "A60; A61; A62" />
    </Axes>

    <Figure>
        <Part>
            <Vertices>
                <Add Vector = "-W; -W; -W" />
                <Add Vector = "-W; -W; +W" />
                <Add Vector = "-W; +W; -W" />
                <Add Vector = "-W; +W; +W" />
                <Add Vector = "+W; -W; -W" />
                <Add Vector = "+W; -W; +W" />
                <Add Vector = "+W; +W; -W" />
                <Add Vector = "+W; +W; +W" />
            </Vertices>

            <Faces>
                <Face Color = "808080" VertexIndexes = "0;1;3;2" />
                <Face Color = "808080" VertexIndexes = "0;4;5;1" />
                <Face Color = "808080" VertexIndexes = "0;2;6;4" />
                <Face Color = "808080" VertexIndexes = "6;7;5;4" />
                <Face Color = "808080" VertexIndexes = "3;7;6;2" />
                <Face Color = "808080" VertexIndexes = "5;7;3;1" />
            </Faces>
        </Part>
        <ShowAll/>
        <SplitByAxes/>

        <Cut Color = "C0" > <Plane NormVector = "-A00; -A01; -A02" NormDistance = "-S" /> </Cut>
        <Cut Color = "C1" > <Plane NormVector = "-A10; -A11; -A12" NormDistance = "-S" /> </Cut>
        <Cut Color = "C2" > <Plane NormVector = "-A20; -A21; -A22" NormDistance = "-S" /> </Cut>
        <Cut Color = "C3" > <Plane NormVector = "-A30; -A31; -A32" NormDistance = "-S" /> </Cut>
        <Cut Color = "C4" > <Plane NormVector = "-A40; -A41; -A42" NormDistance = "-S" /> </Cut>
        <Cut Color = "C5" > <Plane NormVector = "-A50; -A51; -A52" NormDistance = "-S" /> </Cut>
        <Cut Color = "C6" > <Plane NormVector = "-A60; -A61; -A62" NormDistance = "-S" /> </Cut>


        <Cut Color = "C0" > <Plane NormVector = "-A00; -A01; -A02-P1" NormDistance = "-S" /> </Cut>
        <Cut Color = "C0" > <Plane NormVector = "-A00; -A01; -A02+P2" NormDistance = "-S" /> </Cut>
        <Cut Color = "C0" > <Plane NormVector = "-A00; -A01-P1; -A02" NormDistance = "-S" /> </Cut>
        <Cut Color = "C0" > <Plane NormVector = "-A00; -A01+P2; -A02" NormDistance = "-S" /> </Cut>
        <Cut Color = "C0" > <Plane NormVector = "-A00-P1; -A01; -A02" NormDistance = "-S" /> </Cut>
        <Cut Color = "C0" > <Plane NormVector = "-A00+P2; -A01; -A02" NormDistance = "-S" /> </Cut>
       
        <Cut Color = "C1" > <Plane NormVector = "-A10; -A11; -A12+P1" NormDistance = "-S" /> </Cut>
        <Cut Color = "C1" > <Plane NormVector = "-A10; -A11; -A12-P2" NormDistance = "-S" /> </Cut>
        <Cut Color = "C1" > <Plane NormVector = "-A10; -A11-P1; -A12" NormDistance = "-S" /> </Cut>
        <Cut Color = "C1" > <Plane NormVector = "-A10; -A11+P2; -A12" NormDistance = "-S" /> </Cut>
        <Cut Color = "C1" > <Plane NormVector = "-A10-P1; -A11; -A12" NormDistance = "-S" /> </Cut>
        <Cut Color = "C1" > <Plane NormVector = "-A10+P2; -A11; -A12" NormDistance = "-S" /> </Cut>
       
        <Cut Color = "C2" > <Plane NormVector = "-A20; -A21; -A22-P1" NormDistance = "-S" /> </Cut>
        <Cut Color = "C2" > <Plane NormVector = "-A20; -A21; -A22+P2" NormDistance = "-S" /> </Cut>
        <Cut Color = "C2" > <Plane NormVector = "-A20; -A21+P1; -A22" NormDistance = "-S" /> </Cut>
        <Cut Color = "C2" > <Plane NormVector = "-A20; -A21-P2; -A22" NormDistance = "-S" /> </Cut>
        <Cut Color = "C2" > <Plane NormVector = "-A20-P1; -A21; -A22" NormDistance = "-S" /> </Cut>
        <Cut Color = "C2" > <Plane NormVector = "-A20+P2; -A21; -A22" NormDistance = "-S" /> </Cut>

        <Cut Color = "C3" > <Plane NormVector = "-A30; -A31; -A32+P1" NormDistance = "-S" /> </Cut>
        <Cut Color = "C3" > <Plane NormVector = "-A30; -A31; -A32-P2" NormDistance = "-S" /> </Cut>
        <Cut Color = "C3" > <Plane NormVector = "-A30; -A31+P1; -A32" NormDistance = "-S" /> </Cut>
        <Cut Color = "C3" > <Plane NormVector = "-A30; -A31-P2; -A32" NormDistance = "-S" /> </Cut>
        <Cut Color = "C3" > <Plane NormVector = "-A30-P1; -A31; -A32" NormDistance = "-S" /> </Cut>
        <Cut Color = "C3" > <Plane NormVector = "-A30+P2; -A31; -A32" NormDistance = "-S" /> </Cut>

        <Cut Color = "C4" > <Plane NormVector = "-A40; -A41; -A42-P1" NormDistance = "-S" /> </Cut>
        <Cut Color = "C4" > <Plane NormVector = "-A40; -A41; -A42+P2" NormDistance = "-S" /> </Cut>
        <Cut Color = "C4" > <Plane NormVector = "-A40; -A41-P1; -A42" NormDistance = "-S" /> </Cut>
        <Cut Color = "C4" > <Plane NormVector = "-A40; -A41+P2; -A42" NormDistance = "-S" /> </Cut>
        <Cut Color = "C4" > <Plane NormVector = "-A40+P1; -A41; -A42" NormDistance = "-S" /> </Cut>
        <Cut Color = "C4" > <Plane NormVector = "-A40-P2; -A41; -A42" NormDistance = "-S" /> </Cut>

        <Cut Color = "C5" > <Plane NormVector = "-A50; -A51; -A52+P1" NormDistance = "-S" /> </Cut>
        <Cut Color = "C5" > <Plane NormVector = "-A50; -A51; -A52-P2" NormDistance = "-S" /> </Cut>
        <Cut Color = "C5" > <Plane NormVector = "-A50; -A51-P1; -A52" NormDistance = "-S" /> </Cut>
        <Cut Color = "C5" > <Plane NormVector = "-A50; -A51+P2; -A52" NormDistance = "-S" /> </Cut>
        <Cut Color = "C5" > <Plane NormVector = "-A50+P1; -A51; -A52" NormDistance = "-S" /> </Cut>
        <Cut Color = "C5" > <Plane NormVector = "-A50-P2; -A51; -A52" NormDistance = "-S" /> </Cut>
       
        <Cut Color = "C6" > <Plane NormVector = "-A60; -A61; -A62+P2" NormDistance = "-S" /> </Cut>
        <Cut Color = "C6" > <Plane NormVector = "-A60; -A61; -A62-P2" NormDistance = "-S" /> </Cut>
        <Cut Color = "C6" > <Plane NormVector = "-A60; -A61+P2; -A62-P1" NormDistance = "-S" /> </Cut>
        <Cut Color = "C6" > <Plane NormVector = "-A60; -A61-P2; -A62-P1" NormDistance = "-S" /> </Cut>
        <Cut Color = "C6" > <Plane NormVector = "-A60; -A61+P2; -A62+P1" NormDistance = "-S" /> </Cut>
        <Cut Color = "C6" > <Plane NormVector = "-A60; -A61-P2; -A62+P1" NormDistance = "-S" /> </Cut>


        <Turn  Axis = "0" Angle = "A3" Layer = "1" />
        <Split Axis = "5" From  = "1"/>
        <Undo  Repeat = "1" />
       
        <Turn  Axis = "1" Angle = "A3" Layer = "1" />
        <Split Axis = "2" From  = "1"/>
        <Undo  Repeat = "1" />

        <Turn  Axis = "2" Angle = "A3+A4" Layer = "1" />
        <Turn  Axis = "1" Angle = "A3" Layer = "1" />
        <Turn  Axis = "2" Angle = "-A3-A4" Layer = "1" />
        <Split Axis = "0" From  = "1"/>
        <Split Axis = "5" From  = "1"/>
        <Undo  Repeat = "3" />
       
       
        <Turn  Axis = "3" Angle = "-A3-A4" Layer = "1" />
        <Turn  Axis = "0" Angle = "-A3" Layer = "1" />
        <Turn  Axis = "3" Angle = "A3+A4" Layer = "1" />
        <Split Axis = "1" From  = "1"/>
        <Split Axis = "4" From  = "1"/>
        <Undo  Repeat = "3" />
       
        <Turn  Axis = "6" Angle = "A4" Layer = "1" />
        <Turn  Axis = "4" Angle = "-A4" Layer = "1" />
        <Split Axis = "6" From  = "1"/>
        <Undo  Repeat = "2" />
       
        <Turn  Axis = "6" Angle = "-A4" Layer = "1" />
        <Turn  Axis = "5" Angle = "A4" Layer = "1" />
        <Split Axis = "6" From  = "1"/>
        <Undo  Repeat = "2" />
       
        <Turn  Axis = "2" Angle = "-A3" Layer = "1" />
        <Turn  Axis = "0" Angle = "-A3" Layer = "1" />
        <Turn  Axis = "2" Angle = "A3" Layer = "1" />       
        <Turn  Axis = "1" Angle = "A3" Layer = "1" />
        <Turn  Axis = "5" Angle = "+A4+A3" Layer = "1" />
        <Turn  Axis = "2" Angle = "-A4" Layer = "1" />
        <Turn  Axis = "6" Angle = "-A4" Layer = "1" />
        <Split Axis = "5" From  = "1"/>
        <Undo  Repeat = "7" />
       
       
     
    </Figure>
</xml>
Эти ужасные заборы из копипасты же можно как-то автоматизировать? Циклы есть? Массивы? Я только макросы нашёл. И я не нашёл поддержку операций над 3д-векторами. Можно тупо в язык вшить, как в язык шейдеров. А то получается по факту, что проще внешней программой генерировать модель.
« Последнее редактирование: 27 июля 2023, 00:07:01 от T4r4sB »

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 210
Re: Идея семи-осника
« Ответ #25 : 26 июля 2023, 23:48:10 »
Без "подушечек", тут правда некоторые элементы лезут наружу и мешают поворотам
<?xml version="1.0" encoding="UTF-8"?>
<xml Data_Version="2">
    <Interface>
        <Name>SemiOsnik</Name>
        <Menu>Other forms\Unclassified\SemiOsnik</Menu>
        <Inventor>None</Inventor>
        <Programmer>T4r4sB</Programmer>
        <Added>2023-07-20</Added>
        <Link>http://twistypuzzles.ru/forum/index.php/topic,1260.0.html</Link>
    </Interface>

    <Script>
        clBlue   := '0000C8';
        clGreen  := '009600';
        clRed    := 'C80000';
        clYellow := 'FFFF00';
        clWhite  := 'FFFFFF';

        A3 := Pi * 2/3;
        A4 := arccos(1/4);

        W := 20.0;
        D := 0.3;
        S := 0.5;

        P1 := 0.3;
        P2 := 0.5;

        A00 :=  -sqrt(3)/3;           A01 := -sqrt(3)/3;           A02 := -sqrt(3)/3;
        A10 :=  -sqrt(3)/3;           A11 := -sqrt(3)/3;           A12 := +sqrt(3)/3;
        A20 :=  -sqrt(3)/3;           A21 := +sqrt(3)/3;           A22 := -sqrt(3)/3;
        A30 :=  -sqrt(3)/3;           A31 := +sqrt(3)/3;           A32 := +sqrt(3)/3;
        A40 :=  +sqrt(3)/3;           A41 := -sqrt(3)/3;           A42 := -sqrt(3)/3;
        A50 :=  +sqrt(3)/3;           A51 := -sqrt(3)/3;           A52 := +sqrt(3)/3;
        A60 :=  (sqrt(15)+sqrt(3))/6; A61 := (sqrt(15)-sqrt(3))/6; A62 := 0.0;

        C0 := 'FFFF00';
        C1 := 'BBDDFF';
        C2 := 'FF4000';
        C3 := '0040FF';
        C4 := '40FF00';
        C5 := 'FF8000';
        C6 := 'FFFFFF';
    </Script>

    <Axes TurningAngles = "0; 2*Pi" AvailableAngles = "0; A3; -A3;" PlaneDistances = "D" >
        <Axis NormVector = "A00; A01; A02" />
        <Axis NormVector = "A10; A11; A12" />
    </Axes>
    <Axes TurningAngles = "0; 2*Pi" AvailableAngles = "0; A3; A4; -A3; -A4; A3+A4; -A3-A4" PlaneDistances = "D" >
        <Axis NormVector = "A20; A21; A22" />
        <Axis NormVector = "A30; A31; A32" />
        <Axis NormVector = "A40; A41; A42" />
        <Axis NormVector = "A50; A51; A52" />
    </Axes>
    <Axes TurningAngles = "0; 2*Pi" AvailableAngles = "0; A4; -A4" PlaneDistances = "D" >
        <Axis NormVector = "A60; A61; A62" />
    </Axes>

    <Figure>
        <Part>
            <Vertices>
                <Add Vector = "-W; -W; -W" />
                <Add Vector = "-W; -W; +W" />
                <Add Vector = "-W; +W; -W" />
                <Add Vector = "-W; +W; +W" />
                <Add Vector = "+W; -W; -W" />
                <Add Vector = "+W; -W; +W" />
                <Add Vector = "+W; +W; -W" />
                <Add Vector = "+W; +W; +W" />
            </Vertices>

            <Faces>
                <Face Color = "808080" VertexIndexes = "0;1;3;2" />
                <Face Color = "808080" VertexIndexes = "0;4;5;1" />
                <Face Color = "808080" VertexIndexes = "0;2;6;4" />
                <Face Color = "808080" VertexIndexes = "6;7;5;4" />
                <Face Color = "808080" VertexIndexes = "3;7;6;2" />
                <Face Color = "808080" VertexIndexes = "5;7;3;1" />
            </Faces>
        </Part>
        <ShowAll/>
        <SplitByAxes/>

        <Cut Color = "C0" > <Plane NormVector = "-A00; -A01; -A02" NormDistance = "-S" /> </Cut>
        <Cut Color = "C1" > <Plane NormVector = "-A10; -A11; -A12" NormDistance = "-S" /> </Cut>
        <Cut Color = "C2" > <Plane NormVector = "-A20; -A21; -A22" NormDistance = "-S" /> </Cut>
        <Cut Color = "C3" > <Plane NormVector = "-A30; -A31; -A32" NormDistance = "-S" /> </Cut>
        <Cut Color = "C4" > <Plane NormVector = "-A40; -A41; -A42" NormDistance = "-S" /> </Cut>
        <Cut Color = "C5" > <Plane NormVector = "-A50; -A51; -A52" NormDistance = "-S" /> </Cut>
        <Cut Color = "C6" > <Plane NormVector = "-A60; -A61; -A62" NormDistance = "-S" /> </Cut>



        <Turn  Axis = "0" Angle = "A3" Layer = "1" />
        <Split Axis = "5" From  = "1"/>
        <Undo  Repeat = "1" />
       
        <Turn  Axis = "1" Angle = "A3" Layer = "1" />
        <Split Axis = "2" From  = "1"/>
        <Undo  Repeat = "1" />

        <Turn  Axis = "2" Angle = "A3+A4" Layer = "1" />
        <Turn  Axis = "1" Angle = "A3" Layer = "1" />
        <Turn  Axis = "2" Angle = "-A3-A4" Layer = "1" />
        <Split Axis = "0" From  = "1"/>
        <Split Axis = "5" From  = "1"/>
        <Undo  Repeat = "3" />
       
       
        <Turn  Axis = "3" Angle = "-A3-A4" Layer = "1" />
        <Turn  Axis = "0" Angle = "-A3" Layer = "1" />
        <Turn  Axis = "3" Angle = "A3+A4" Layer = "1" />
        <Split Axis = "1" From  = "1"/>
        <Split Axis = "4" From  = "1"/>
        <Undo  Repeat = "3" />
       
        <Turn  Axis = "6" Angle = "A4" Layer = "1" />
        <Turn  Axis = "4" Angle = "-A4" Layer = "1" />
        <Split Axis = "6" From  = "1"/>
        <Undo  Repeat = "2" />
       
        <Turn  Axis = "6" Angle = "-A4" Layer = "1" />
        <Turn  Axis = "5" Angle = "A4" Layer = "1" />
        <Split Axis = "6" From  = "1"/>
        <Undo  Repeat = "2" />
       
        <Turn  Axis = "2" Angle = "-A3" Layer = "1" />
        <Turn  Axis = "0" Angle = "-A3" Layer = "1" />
        <Turn  Axis = "2" Angle = "A3" Layer = "1" />       
        <Turn  Axis = "1" Angle = "A3" Layer = "1" />
        <Turn  Axis = "5" Angle = "+A4+A3" Layer = "1" />
        <Turn  Axis = "2" Angle = "-A4" Layer = "1" />
        <Turn  Axis = "6" Angle = "-A4" Layer = "1" />
        <Split Axis = "5" From  = "1"/>
        <Undo  Repeat = "7" />
       
       
     
    </Figure>
</xml>

Кстати, оффтоп: в Руа кубе такая же проблема: https://i.ibb.co/pKGTxk6/screen.png. В реальном экземпляре же там всё нормально крутится за счёт податливости элементов?
Если так, то тоже есть что пофиксить в pCubes. Добавить какой-нибудь эпсилон тоже на критерий "можно ли повернуть слой". А заодно и фуджинг появится.
« Последнее редактирование: 27 июля 2023, 00:00:51 от T4r4sB »

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 210
Re: Идея семи-осника
« Ответ #26 : 26 июля 2023, 23:54:38 »
А, ещё после скрамбла почему-то какая-то ерунда с углами происходит, он не останавливается на тех углах, на которых должен.
Поправка - если вращать за "середину", то оси становятся неправильными. Как запретить вращать "за середину"?

А, я понял, почему-то работает как надо такое:
<Axes TurningAngles = "0; 2*Pi" AvailableAngles = "0; A3; -A3;" PlaneDistances = "D" >
А вот такое вращает середину:
<Axes TurningAngles = "2*Pi/3"; PlaneDistances = "D" >Чёто разницу я не уловил.
« Последнее редактирование: 27 июля 2023, 00:00:35 от T4r4sB »

Оффлайн grigr

  • Глобальный модератор
  • *****
  • Сообщений: 5 257
  • Пол: Мужской
  • кручу-верчу
    • Мой Магазин
Re: Идея семи-осника
« Ответ #27 : 27 июля 2023, 00:14:27 »
Эти ужасные заборы из копипасты же можно как-то автоматизировать? Циклы есть? Массивы? Я только макросы нашёл. И я не нашёл поддержку операций над 3д-векторами. Можно тупо в язык вшить, как в язык шейдеров. А то получается по факту, что проще внешней программой генерировать модель.

вообще-то там более менее полноценный скриптовый язык программирования. все есть!
операции над векторами реализованы на самом языке. есть в других скриптах.

Оффлайн T4r4sB

  • Постоялец
  • ***
  • Сообщений: 210
Re: Идея семи-осника
« Ответ #28 : 27 июля 2023, 00:31:03 »

вообще-то там более менее полноценный скриптовый язык программирования. все есть!
операции над векторами реализованы на самом языке. есть в других скриптах.
Я посмотрел как закодированы разные паззлы, не увидел ни одного, где было бы применение скалярного или векторного произведения, например. Такие есть?

Блин, а я не знаю, как разрезать красно-синее ребро на "подушечной" версии. Там лишний разрез на ней получается
« Последнее редактирование: 27 июля 2023, 01:09:16 от T4r4sB »

Оффлайн myth

  • Постоялец
  • ***
  • Сообщений: 107
  • Пол: Мужской
  • ---я вернулся?---
Re: Идея семи-осника
« Ответ #29 : 27 июля 2023, 09:18:06 »
Сделал в pCubes похожее тело, скорее-всего не оно, нарезал "от балды, посмотреть что бы было на что.
...
   <Axis NormVector = "-1;-1;-1" />
   <Axis NormVector = " 1; 1;-1" />
   <Axis NormVector = " 1;-1; 1" />
   <Axis NormVector = "-1; 1; 1" />
Это обычный скьюб

Нет, это описание векторов для осей.
Тем более, что что есть и другие пазлы с такими характеристиками.

Надо понять, что у симулятора свой подход и логика при описании пазла.
Вектор определяется по трём координатам, но автор pCubes посчитал, что при декларировании вектора не обязательно привязываться к каким-то размерам, поэтому пара строк описывают один вектор:
1) <Axis NormVector = "-1;-1;-1" />
2) <Axis NormVector = "-13;-13;-13" />
Определяется что вектор всегда начинается от начала координат, а по параметрам этим задаётся его направление.
Все же размеры и прочее обычно уже описывается в скрипте.
Помните, Вы указывали свои параметры, которые я "игнорировал", просто ещё не был готов ответить, извините.
Вот Ваше фото:

Здесь каждую строку, для наглядности, поделить на "корень из трёх и делить на 3", то получится:
-1; -1; -1
-1; -1; 1
-1; 1; -1
.....кусь....
Но это те же строки, они работают в симуляторе одинаково.

А не мог ответить сразу, так как не был уверен тогда в ответе, не проверил это в скрипте.

Спасибо, удачи.