Size: a a a

Язык программирования Julia / Julia programming language

2020 January 20

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Можно сразу пару оптимизаций сделать (хотя всё равно слишком долго будет отрабатывать)
1. Вместо 26 a сделать один вектор с 26 элементами.
2. Внутренние 26 присвоений заменить на пробежку по этому циклу
3. res поменять с vector на Set (так дубли отсекутся)
4. условие накладывать до того, как осуществляешь push!
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
3 и 4 пункты снизят нагрузку на память, как минимум.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
То есть начало будет выглядеть как-то так
a = [[x y z] + T1, [-y x - y z] + T1, [-x + y -x z] + T1
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
А внутри будет
for b in a
  p = b .+  [i j k]
if  -a1 < p[1] < a1 && -b1 < p[2] < b1 && -c1 < p[3] < c1
 push!(res, p)
end
end
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Ну, пишу приблизительно, детали надо конечно выверять.
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Андрей Оськин
А внутри будет
for b in a
  p = b .+  [i j k]
if  -a1 < p[1] < a1 && -b1 < p[2] < b1 && -c1 < p[3] < c1
 push!(res, p)
end
end
Попробую. ))
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Тут надо всё-таки сесть и подумать, что хочется на выходе.
Иногда бывает полезно начать с интерфейсных функций (то есть тех, которые будут доступны пользователю) и исходя из них проработать бекенд. Я не знаю scilab, но выглядит так, что он ориентирует пользователя мыслить матрицами/векторами, возможно векторными операциями.

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

Если нужна россыпь точек, неструктурированная, то лучше Set использовать, ну или как минимум вектор и по нему итерироваться.
Если очень нужно иметь точки в виде матрицы nx3 (а лучше 3xn), то тогда наверное лучше в таком виде все операции писать, но совсем не факт, что в этом будет смысл, а гемороя будет много.
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Андрей Оськин
Тут надо всё-таки сесть и подумать, что хочется на выходе.
Иногда бывает полезно начать с интерфейсных функций (то есть тех, которые будут доступны пользователю) и исходя из них проработать бекенд. Я не знаю scilab, но выглядит так, что он ориентирует пользователя мыслить матрицами/векторами, возможно векторными операциями.

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

Если нужна россыпь точек, неструктурированная, то лучше Set использовать, ну или как минимум вектор и по нему итерироваться.
Если очень нужно иметь точки в виде матрицы nx3 (а лучше 3xn), то тогда наверное лучше в таком виде все операции писать, но совсем не факт, что в этом будет смысл, а гемороя будет много.
Подумаю над этим
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Просто всё, что мы обсуждали выглядит как-то так
1. Есть набор точек (как Set)
2. К каждой точке можно применить трансформации 1 (которые зашифрованы в a1...a26)
3. К результату каждой трансформации надо применить трансформацию два (трансляцию, зашита в for i = -n:n)
4. Всю эту кучу надо очистить констрейнами.
5. На выходе опять получаем набор точек.
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Вроде на этом этапе нигде не используется то, что точки как-то связаны пространственными отношениями друг с другом.
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Каждая точка размножается самостоятельно. Алгоритм выглядит примерно так, да
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Я уже говорил, я бы наверное шёл от типов, от простого к сложному. Что у нас есть в задаче:
1. Есть точки
2. Есть изометрии, которые действуют на эти точки

Точки все "гомогенные" — для них хватит одного типа
struct Point{T}
x :: T
y :: T
z :: T
end
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
^_^
Чувствую мы тут скоро станем кристаллографами 😊
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
изометрии разные: повороты, сдвиги
abstract type AbstractIsometry end

struct Shift{T} <: AbstractIsometry
v :: Vector{T}
end

struct Rotation{T} <: AbstractIsometry
mat :: Matrix{T}
end
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Лично мне надобно отдохнуть...
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
далее описывать композицию движений + как движения действуют на точки:

function (S :: Shift)(p :: Point)
...
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Существует 230 групп, внутри которых комбинируются 96 операций ослажненных различными трансляциями. Что то мне подсказывает, что я умру пока все что планировал напишу
источник

АО

Андрей Оськин in Язык программирования Julia / Julia programming language
Так группы то наверное полупростые.
источник

KT

Kirill Tsaregorodtsev in Язык программирования Julia / Julia programming language
Самое простое — подключить GAP к julia и выкачать оттуда все эти группы, обернув их в удобный интерфейс )
источник

VM

Viktor Maslov in Язык программирования Julia / Julia programming language
Viktor Maslov
Существует 230 групп, внутри которых комбинируются 96 операций ослажненных различными трансляциями. Что то мне подсказывает, что я умру пока все что планировал напишу
Ну тут как сказать...
источник