1 / 1 / 1
Регистрация: 31.01.2013
Сообщений: 32
1

Нарисовать окружность, квадрат, треугольник

11.12.2018, 22:10. Показов 1172. Ответов 1
Метки нет (Все метки)

Есть задача в окружность внести квадрат, а в квадрат внести треугольник.

Я могу внести в окружность ромб, но дальше код никак не реагирует.
Есть у кого какие предложения?


Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
.MODEL SMALL ;Модель памяти ближнего типа.
.STACK 256 ;Отвести под стек 256 байт.
.486 ;Используем расширенную систему команд.
.DATA ;Открыть сегмент данных.
 x360 DD 180.0 ;Константа перевода градусы–радианы.
 x36 DW 360 ;Число точек на окружности.
 forcolor DB 00001001b ;
 forcolor2 DB 00001001b ;
 forcolor3 DB 00001001b ;
 xc DW 320 ;Координаты центра
 yc DW 240 ;окружности.
 rx DW 100 ;Значения радиуса по оси x.
 ry DW 100 ;Значения радиуса по оси y.
 xc2 DW 300 ;Координаты центра
 yc2 DW 200 ;окружности.    
xc3 DW 450 ;Координаты центра
 yc3 DW 200 ;окружности.
 xc4 DW 225 ;Координаты центра
 yc4 DW 350 ;окружности.
 xc5 DW 375 ;Координаты центра
 yc5 DW 350 ;окружности.  
 xc_yc DB '300,200','$' ;Выводимые значения координат.
;================= Переменные =========================
 x DW ? ;Координата точки окружности x.
 y DW ? ;Координата точки окружности y.
x_pos equ 320   ;положение центра ромба x
y_pos equ 240    ;положение центра ромба y
VGA_mode equ 13h 
color equ 1     ;цвет
sizeRomb equ 100    ;половина ширины х и высоты y в пикселях
 Angl DW 1 ;Угол поворота радиуса.
;----------------------------------------------------------------------------------- ------
.CODE ;Открыть сегмент кодов.
;================ Вывод пикселя ========================
 Point PROC
;CX – координата X (столбец), DX – координата Y (строка),
;AL – цвет пиксела
 pusha
 mov CX, xc ;Вычисляем координату
 add CX, x ;x в регистре CX.
 mov DX, yc ;Вычисляем координату
 sub DX, y ;y в регистре DX.
 mov AL, forcolor
 mov BH, 0
 mov AH, 12 ;Вывести пиксел
 int 10h ;средствами BIOS.
 popa
 ret
 Point ENDP
;================ Вывод пикселя 2========================
 Point2 PROC
;CX – координата X (столбец), DX – координата Y (строка),
;AL – цвет пиксела
 pusha
 mov CX, xc2 ;Вычисляем координату
 add CX, x ;x в регистре CX.
 mov DX, yc2 ;Вычисляем координату
 sub DX, y ;y в регистре DX.
 mov AL, forcolor2
 mov BH, 0
 mov AH, 12 ;Вывести пиксел
 int 10h ;средствами BIOS.
 popa
 ret
 Point2 ENDP
;================ Вывод пикселя 3========================
 Point3 PROC
;CX – координата X (столбец), DX – координата Y (строка),
;AL – цвет пиксела
 pusha
 mov CX, xc3 ;Вычисляем координату
 add CX, x ;x в регистре CX.
 mov DX, yc3 ;Вычисляем координату
 sub DX, y ;y в регистре DX.
 mov AL, forcolor3
 mov BH, 0
 mov AH, 12 ;Вывести пиксел
 int 10h ;средствами BIOS.
 popa
 ret
 Point3 ENDP
 
;============ Закрашивание экрана цветом фона ==============
 Fon PROC
;CX – координата X (столбец), DX – координата Y (строка),
;AL – цвет пиксела
 pusha
 mov CX, 0
 mov DX, 0
mov AL, 00000111b ;Цвет фона.
 mov BH, 0 ;Номер страницы.
 c_1: mov AH, 12 ;Вывести пиксел
 int 10h ;средствами BIOS.
 inc CX
 cmp CX, 639
 jne c_1
 xor CX, CX
 inc DX
 cmp DX, 479
 jne c_1
 popa
 ret
 Fon ENDP
;================ Вывод символа ========================
 Simv PROC
 pusha
 mov AH, 02 ;Функция установки курсора.
 mov BH, 0 ;Номер текущей страницы.
 mov DL, 30 ;Номер столбца.
 mov DH, 12 ;Номер строки.
 int 10h ;Установка курсора.
 lea SI, xc_yc ;Загрузить смещение строки в SI.
 c_2: mov AH, 0Eh ;Функция вывода символа.
 mov BL, 07h ;Выбор цвета символов.
 lodsb ;Переслать символ из строки DS:SI в AL.
 cmp AL, '$' ;Определить конец строки.
 je exit_pr ;Если конец строки достигнут, выход.
 int 10h
 jmp c_2
 exit_pr: popa
 ret
 Simv ENDP
;=============== Ожидание нажатия клавиши ===============
 WaitKey PROC
 pusha
 mov AH, 08h
 int 21h
 popa
 ret
 WaitKey ENDP
;=============== Главная процедура =======================
Main PROC
;Подготовка данных
 mov AX, @DATA ;Инициализация
 mov DS, AX ;регистра DS.
 mov AH, 0 ;Установка графического
 mov AL, 12h ;режима 320x200x16
 int 10h ;средствами BIOS.
 call Fon ;Вызов процедуры закрашивания фона.
 call WaitKey ;Вызов процедуры задержки.
 mov CX, x36 ;Число шагов построения окружности.
 finit ;Инициализация сопроцессора.
 fldpi ;Загрузка в стек числа pi.
 fld x360 ;Загрузка в стек числа 180.
 fdiv ;pi/180, результат в ST(0).
 fstp x360 ;Сохранение в памяти коэффициента
 ;перевода градусов в радианы.
;--------------- Вычисление координат точек окружности ------------------
 do1: fld x360 ;Коэффициент градус->радиан в стек.
 fild angl ;Очередное значения угла в стек.
 fmul ;Перевод в радианы.
 fsincos ;sin(x) -> st(1), cos(x) -> st(0).
 fild rx ;Загрузка радиуса по координате x.
 fmul ;Вычисление координаты x=rx*cos(angl).
 fistp x ;Запись ее в память в формате целого
 ;числа с извлечением из стека.
 fild ry ;Загрузка радиуса по координате y.
 fmul ;Вычисление координаты y=ry*sin(angl).
 fistp y ;Запись ее в память в формате целого
 ;числа с извлечением из стека.
 fwait ;Ожидание завершения работы сопроцессора.
 call Point ;Вывод точки на экран.
 inc Angl ;Приращение угла.
 loop do1 ;Повторить цикл, пока CX не 0.
set_proc:
mov ah,0Ch      ; настройка параметров для вызова функции 0Ch
mov al,color
mov cx, x_pos
mov dx, y_pos-sizeRomb
 
line_1:
int 10h
inc cx
inc dx
cmp cx, x_pos+sizeRomb
jne line_1
 
line_2:
int 10h
inc dx
dec cx
cmp cx,x_pos
jne line_2
 
line_3:
int 10h
dec cx
dec dx
cmp cx,x_pos-sizeRomb
jne line_3
 
line_4:
int 10h
inc cx
dec dx
cmp cx,x_pos
jne line_4
 
 
 mov AX, 4C00h ;Выход в
 int 21h ;DOS.
Main ENDP
 END Main
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2018, 22:10
Ответы с готовыми решениями:

Нарисовать треугольник в треугольнике
Нарисовать треугольник в треугольнике. Реализовать перемещение фигуры с помощью стрелок на...

Как нарисовать треугольник из символов?
Помогите пожалуйстаааа! Необходимо нарисовать треугольник из символов, используя обращение к...

Нарисовать треугольник в графическом режиме
Здравствуйте! В данной программе нужно изменить вершины и сделать по центру треугольник. .model...

Может кто нарисовать квадрат движущийся по горизонтале!
Привет, ребята) помогите!! не особо разбираюсь в ассемблере, а лабораторную сдать нужно((

1
Модератор
Эксперт по электронике
7757 / 3907 / 1503
Регистрация: 01.02.2015
Сообщений: 12,061
Записей в блоге: 2
14.12.2018, 18:15 2
Начать с описания формулами. Вывести характеристики фигур (центр, радиус, координаты точек).
И после этого проверить на C/Pascal/Java. Если правильно - рисовать на ассемблере - смысл остаётся тем же.

А так - я бы не взялся вам помогать, т.к. нужно вспоминать, искать формулы алгебраической геометрии.

Процедуры рисования окружностей, линий можете посмотреть дополнительно
https://www.cyberforum.ru/post12200509.html
https://www.cyberforum.ru/post13049631.html
Рисование спиралей и окружностей (некорректная отрисовка окружностей)
А также в FAQ для раздела Assembler, MASM, TASM
есть целый подраздел различной графики.

Но подчеркну - первична математика.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2018, 18:15

Построить квадрат или треугольник в зависимости от введенного символа
Здравствуйте! Вот попалось мне такое задание "Ввести символ (символ 1 или символ 2) и в зависимости...

Нарисовать треугольник
Помогите нарисовать треугольник с вершинами в точках (0;0),(20;0),(0;20) прямой записью пикселей в...

Нарисовать треугольник - зацикливается программа
Вообще в итоге нужно что бы был нарисован ромб, я пока пытаюсь просто треугольник нарисовать. Вот и...

Нарисовать треугольник, внизу треугольника небольшой не зарисованный прямоугольник
Я смотрел похожие темы,но не могу понять как при рисовании на следующей строке линии больше на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru