Пример:
Сохраненить геометрическое построение, выполненное средствами Симплекса, в логической программе в виде множества предикатов вида save(X).
Построение, преобразуемое в множество предикатов логической програмы (задано средствами геометрического программирования Симплекса):
1 |
|
Точка p1 задана координатами 0 и 0 . |
2 |
|
Прямая o1 задана точкой p1 и углом rect к оси OX. |
3 |
|
Прямая o3 задана точкой p1 и углом 0 к оси OX. |
4 |
|
Точка p2 принадлежит объекту o1 с параметром принадлежности 1.39 . |
5 |
|
Окружность d1 задана центром p2 и радиусом 42.511763 . |
6 |
|
Окружность d2 задана центром p1 и радиусом 87.688369 . |
7 |
|
Прямая o4 касается окружностей d2 и d1 в точках p3 и p4 . |
8 |
|
Прямая o5 касается окружностей d1 и d2 в точках p7 и p8 . |
9 |
|
Дуга p9 окружности d1 задана начальной точкой p4 и конечной точкой p7 . |
10 |
|
Дуга p10 окружности d2 задана начальной точкой p8 и конечной точкой p3 . |
11 |
|
Контур w2 построен на объектах o5, p10, o4, p9 |
12 |
|
Точка p11 принадлежит объекту w2 с параметром принадлежности 1.2478879 . |
13 |
|
Точка p12 принадлежит объекту w2 с параметром принадлежности 1.7576387 . |
14 |
|
Точка p13 принадлежит объекту w2 с параметром принадлежности 3.7606057 . |
15 |
|
Точка p14 принадлежит объекту w2 с параметром принадлежности 3.2428504 . |
16 |
|
Прямоугольный контур w3 по точке p13 с размерами 10 и 30 . |
17 |
|
Прямоугольный контур w4 по точке p14 с размерами 10 и 30 . |
18 |
|
Прямоугольный контур w5 по точке p11 с размерами 10 и 30 . |
19 |
|
Прямоугольный контур w6 по точке p12 с размерами 10 и 30 . |
20 |
|
Контур w7 есть объединение контуров w4, w3, w5, w6 . |
21 |
|
Контур w8 есть отсечение контура w2 контуром w7 . |
22 |
|
Штриховка f1 на контуре w8 по направлению 45 с шагом 10 . |
Цель: @r(In,Out,Fm,F,A),eq(X,@r(In,Out,Fm,F,A)),assert(save(X)).
Сгенерированная логическая программа:
save(@r([[0], [0]], [p1], '0', 'Точка задана координатами', 'Главный')).
save(@r([[p1], [90]], [o1], '0', 'Прямая проведена через точку под углом к оси OX', 'Главный')).
save(@r([[p1], [0]], [o3], '0', 'Прямая проведена через точку под углом к оси OX', 'Главный')).
save(@r([[o1], [1.39]], [p2], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[p2], [42.51]], [d1], '0', 'Окружность задана центром и радиусом', 'Главный')).
save(@r([[p1], [87.69]], [d2], '0', 'Окружность задана центром и радиусом', 'Главный')).
save(@r([[d2], [d1]], [o4, p3, p4], '0', '', 'Главный')).
save(@r([[d1], [d2]], [o5, p7, p8], '0', '', 'Главный')).
save(@r([[d1], [p4], [p7]], [p9], '0', 'Дуга на окружности', 'Главный')).
save(@r([[d2], [p8], [p3]], [p10], '0', 'Дуга на окружности', 'Главный')).
save(@r([[o5, p10, o4, p9]], [w2], '0', 'Контур из компонентов', 'Главный')).
save(@r([[w2], [1.248]], [p11], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[w2], [1.758]], [p12], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[w2], [3.761]], [p13], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[w2], [3.243]], [p14], '0', 'Точка принадлежит объекту', 'Главный')).
save(@r([[p13], [10], [30]], [w3], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[p14], [10], [30]], [w4], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[p11], [10], [30]], [w5], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[p12], [10], [30]], [w6], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[w4, w3, w5, w6]], [w7], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[w2], [w7]], [w8], '0', 'Прямоугольный контур', 'Главный')).
save(@r([[w8], [45], [10]], [f1], '0', 'Прямоугольный контур', 'Главный')).
Листинг результата
# |
In |
Out |
Fm |
F |
A |
X |
1 |
[[0], [0]] |
[p1] |
'0' |
'Точка задана координатами' |
'Главный' |
@r([[0], [0]], [p1], '0', 'Точка задана координатами', 'Главный') |
2 |
[[p1], [90]] |
[o1] |
'0' |
'Прямая проведена через точку под углом к оси OX' |
'Главный' |
@r([[p1], [90]], [o1], '0', 'Прямая проведена через точку под углом к оси OX', 'Главный') |
3 |
[[p1], [0]] |
[o3] |
'0' |
'Прямая проведена через точку под углом к оси OX' |
'Главный' |
@r([[p1], [0]], [o3], '0', 'Прямая проведена через точку под углом к оси OX', 'Главный') |
4 |
[[o1], [1.39]] |
[p2] |
'0' |
'Точка принадлежит объекту' |
'Главный' |
@r([[o1], [1.39]], [p2], '0', 'Точка принадлежит объекту', 'Главный') |
5 |
[[p2], [42.51]] |
[d1] |
'0' |
'Окружность задана центром и радиусом' |
'Главный' |
@r([[p2], [42.51]], [d1], '0', 'Окружность задана центром и радиусом', 'Главный') |
6 |
[[p1], [87.69]] |
[d2] |
'0' |
'Окружность задана центром и радиусом' |
'Главный' |
@r([[p1], [87.69]], [d2], '0', 'Окружность задана центром и радиусом', 'Главный') |
7 |
[[d2], [d1]] |
[o4, p3, p4] |
'0' |
'' |
'Главный' |
@r([[d2], [d1]], [o4, p3, p4], '0', '', 'Главный') |
8 |
[[d1], [d2]] |
[o5, p7, p8] |
'0' |
'' |
'Главный' |
@r([[d1], [d2]], [o5, p7, p8], '0', '', 'Главный') |
9 |
[[d1], [p4], [p7]] |
[p9] |
'0' |
'Дуга на окружности' |
'Главный' |
@r([[d1], [p4], [p7]], [p9], '0', 'Дуга на окружности', 'Главный') |
10 |
[[d2], [p8], [p3]] |
[p10] |
'0' |
'Дуга на окружности' |
'Главный' |
@r([[d2], [p8], [p3]], [p10], '0', 'Дуга на окружности', 'Главный') |
11 |
[[o5, p10, o4, p9]] |
[w2] |
'0' |
'Контур из компонентов' |
'Главный' |
@r([[o5, p10, o4, p9]], [w2], '0', 'Контур из компонентов', 'Главный') |
12 |
[[w2], [1.248]] |
[p11] |
'0' |
'Точка принадлежит объекту' |
'Главный' |
@r([[w2], [1.248]], [p11], '0', 'Точка принадлежит объекту', 'Главный') |
13 |
[[w2], [1.758]] |
[p12] |
'0' |
'Точка принадлежит объекту' |
'Главный' |
@r([[w2], [1.758]], [p12], '0', 'Точка принадлежит объекту', 'Главный') |
14 |
[[w2], [3.761]] |
[p13] |
'0' |
'Точка принадлежит объекту' |
'Главный' |
@r([[w2], [3.761]], [p13], '0', 'Точка принадлежит объекту', 'Главный') |
15 |
[[w2], [3.243]] |
[p14] |
'0' |
'Точка принадлежит объекту' |
'Главный' |
@r([[w2], [3.243]], [p14], '0', 'Точка принадлежит объекту', 'Главный') |
16 |
[[p13], [10], [30]] |
[w3] |
'0' |
'Прямоугольный контур' |
'Главный' |
@r([[p13], [10], [30]], [w3], '0', 'Прямоугольный контур', 'Главный') |
17 |
[[p14], [10], [30]] |
[w4] |
'0' |
'Прямоугольный контур' |
'Главный' |
@r([[p14], [10], [30]], [w4], '0', 'Прямоугольный контур', 'Главный') |
18 |
[[p11], [10], [30]] |
[w5] |
'0' |
'Прямоугольный контур' |
'Главный' |
@r([[p11], [10], [30]], [w5], '0', 'Прямоугольный контур', 'Главный') |
19 |
[[p12], [10], [30]] |
[w6] |
'0' |
'Прямоугольный контур' |
'Главный' |
@r([[p12], [10], [30]], [w6], '0', 'Прямоугольный контур', 'Главный') |
20 |
[[w4, w3, w5, w6]] |
[w7] |
'0' |
'Объединение контуров одноаргументное' |
'Главный' |
@r([[w4, w3, w5, w6]], [w7], '0', 'Объединение контуров одноаргументное', 'Главный') |
21 |
[[w2], [w7]] |
[w8] |
'0' |
'Отсечение контуров' |
'Главный' |
@r([[w2], [w7]], [w8], '0', 'Отсечение контуров', 'Главный') |
22 |
[[w8], [45], [10]] |
[f1] |
'0' |
'Штриховка контура линейная' |
'Главный' |
@r([[w8], [45], [10]], [f1], '0', 'Штриховка контура линейная', 'Главный') |
Пример 2
Удалить копию построения, сохраненную в виде предикатов save в предыдущем примере, из логической программы.
Цель:
save(@r(In, Out, Fm, F, A)), retract(save(@r(In, Out, Fm, F, A))).
|