Вверх ↑
Ответов: 80
Рейтинг: 4
#1: 2013-04-09 02:15:20 ЛС | профиль | цитата
Хм. Вот ошибку нашел. Сейчас исправлю и напишу вам.
------------ Дoбавленo в 01.10:
Tad писал(а):
Вот тут НЕ ВЕРЮ

а зря) что смущает? конкретно в этой программе значения массивов начинаются с 1.
Комментарии это конечно хорошо для кого-то, но я в своем коде все прекрасно понимаю, поэтому и не пишу лишний раз "конец цикла WHILE".
Если же комментарии нужны для того, чтобы объяснить, как работает программа, то это легко.
Tad писал(а):
FOR ring:=1 to rings do

Цикл колец. Проходит все кольца.

Tad писал(а):
k:=3*ring*ring-3*ring;

количество систем обсчитанных ДО кольца. нужны для полного списка систем и индекса каждой системы (координаты).

Tad писал(а):
while (m/(6*ring))<=0.25 do
- здесь была ошибка.
тут я заметил интересную закономерность. что бы у меня совпадало с таблицей, системы отсчитываются от правого верхнего края. по сути дела, что бы узнать координаты всех систем необходим только верхний треугольник и левый. количество систем в треугольники, на уровне кольца равно ring+1, а в левом треугольнике - просто число кольца. в этом легко убедиться. затем.

стоп, вы что то не то писать начали... правильно:
if m<=ring+1
определяется принадлежность к треугольникам.


begin;
a[k+m]:=z[k+m]; //присваивает имя из списка строк элементу массива. может и не нужно, но пока пусть будет.
y[k+m]:=-15-24*ring; //расчет y координаты для элемента верхнего треугольника. в индексе глобальный номер относительно всех систем вообще. формула - чистая геометрия. y координата - высота, прорисовка начинается сверху, значит ставим (-), а значения подбираются исходя из высоты элемента + расстояния между хексами + закономерностей. игрек одна на весь треугольник.
x[k+m]:=14+14*(ring-m); //расчет x координаты точно так же. но она уже изменяется для каждого конкретного элемента, поэтому существует привязка к номеру системы.

RETROGRADE! Я же говорил, что остальные параметры не нужны... Строим симметрично (не забывая об индексах) нижний треугольник.
y[k+3*ring+m]:=-y[k+m];
x[k+3*ring+m]:=-x[k+m];
a[k+3*ring+m]:=z[k+3*ring+m];


else;
Теперь что и как будем строить, если элемент принадлежит 2 треугольнику...

a[k+m]:=z[k+m];
y[k+m]:=-15-24*(2*ring-m+1);
x[k+m]:=14+14*(ring-m);

опять волшебные формулы. стоит обратить внимание на игрек. там приходится высчитывать псевдо-номер. делается, опять же, нехитрым путем M-номера верхнего треугольника... затем идет прибавка псевдо-номера, помноженного на постоянную.


y[k+3*ring+m]:=-y[k+m];
x[k+3*ring+m]:=-x[k+m];
a[k+3*ring+m]:=z[k+3*ring+m];

находим симметричный треугольник (сим-трия относительно точки О);

y[k+3*ring-m]:=-y[k+m];
x[k+3*ring-m]:=x[k+m];
a[k+3*ring-m]:=z[k+3*ring-m];

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



y[k+6*ring-m]:=y[k+m];
x[k+6*ring-m]:=-x[k+m];
a[k+6*ring-m]:=z[k+6*ring-m];

И наконец, координаты последнего треугольника.

Tad писал(а):
inc(m)
я её не люблю

Все. Теперь нужно вывести эти массивы или значения, без разницы: главное собрать работающую схему.

Критикуйте) Мог допустить ошибку.
------------ Дoбавленo в 01.13:
Вот как то так...
------------ Дoбавленo в 01.16:
Да, и еще. Все координаты строятся относительно центра. Центр вычисляется теми самыми X,Y max, которые были в другом коде.
------------ Дoбавленo в 02.15:
Вот, сам же ошибку и нашел. X неправильно определяет. Там две формулы будет. Для четного и нечетного кольца.
карма: 0

0