Сейчас на форуме: (+5 невидимых)

 eXeL@B —› Программирование —› ломаная на Masm32
Посл.ответ Сообщение

Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 21 июня 2007 18:41
· Личное сообщение · #1

недавно я нашел исходник, который соединяет сначала 1ю точку со 2й
потом по такому алгоритму
2 & 1
3 & 1 3 & 2
4 & 1 4 & 2 4 & 3
и потом пятую с первой пятую со второй и тд
вот кусок кода

mov esi,0 ; set index i

.WHILE esi < iCount-1

mov edi,esi
inc edi ; j=i+1

.WHILE edi < iCount
push esi
push edi
shl esi,3 ; Change index to access coords 8 byes/pair
shl edi,3

invoke MoveToEx, hdc, pt.x[esi], pt.y[esi], NULL
invoke LineTo, hdc, pt.x[edi], pt.y[edi]

pop edi
pop esi
inc edi

.ENDW

inc esi

.ENDW
;__________________________________________________________
сообщения от мыши принимаются от мыши

.ELSEIF uMsg==(WM_LBUTTONDOWN) && iCount < 1000
;наш кусок кода, обрабатывающий мышь
mov esi,iCount
shl esi,3


mov eax,lParam
and eax,0FFFFh
mov hitpoint.x,eax
mov eax,lParam
shr eax,16
mov hitpoint.y,eax
mov MouseClick,TRUE
;__________________
mov eax,hitpoint.x
mov ecx,10
mov edx,0
div ecx
mov ebx,10
mul ebx
mov hitpoint.x,eax
; mov hitpoint.x[esi],eax
mov pt.x[esi],eax

mov eax,hitpoint.y
mov ecx,10
mov edx,0
div ecx
mov ebx,10
mul ebx
mov hitpoint.y,eax
mov pt.y[esi],eax
; mov hitpoint.y[esi],eax
inc iCount ; increment the point counter
;__________________

;_____________________________________________________________________ ____-

invoke InvalidateRect,hWnd,NULL,TRUE
.ELSE

КАК СДЕЛАТЬ ТАК ЧТОБЫ ЭТОТ КУСОК КОДА ЛОМАНУЮ СТРОИЛ



Ранг: 62.3 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 22 июня 2007 10:14
· Личное сообщение · #2

GodFather пишет:
ЛОМАНУЮ СТРОИЛ

это как ? не понял вопроса.



Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 30 июня 2007 15:43
· Личное сообщение · #3

Faza пишет:
это как ? не понял вопроса.

это так чтобы соединял точки первую со второй
потом вторую с третьей ............
потом n-1 с n Точкой соединял



Ранг: 51.0 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 02 июля 2007 03:04
· Личное сообщение · #4

а этот код, при беглом его осмотре, вроде как и строит ломаную. только скопирован явно неполностью и криво. начало его в обработчике WM_PAINT. Вообще, место ему где-то в WndProc.
вопрос - откуда взят код и почему так криво?



Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 03 июля 2007 16:22
· Личное сообщение · #5

sotona ты сначала разберись что этот код строит а потом уже говори что он строит



Ранг: 51.0 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 03 июля 2007 21:53
· Личное сообщение · #6

а, да. разобрался.
не пробовал, но вроде так:

mov esi, 0
mov edi, esi
.while esi < iCount-1
inc edi
push edi
push esi

shl esi,3
shl edi,3

invoke MoveToEx, hdc, pt.x[esi], pt.y[esi], NULL
invoke LineTo, hdc, pt.x[edi], pt.y[edi]

pop esi
pop edi
inc esi
.endw

а первые два цикла убрать.



Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 04 июля 2007 13:56
· Личное сообщение · #7

Спасибо разобрался только код должен быть таким

mov esi,0 ; set index i
.WHILE esi < iCount
mov edi,esi
inc edi ; j=i+1
cmp edi,iCount
je @LBL1
push esi
push edi
shl esi,3 ; Change index to access coords 8 byes/pair
shl edi,3

invoke MoveToEx, hdc, pt.x[esi], pt.y[esi], NULL
invoke LineTo, hdc, pt.x[edi], pt.y[edi]

pop edi
pop esi
@LBL1:



inc esi

.ENDW

ты не знаешь можно его как-нибудь оптимизировать или уже нельзя?



Ранг: 51.0 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 04 июля 2007 17:46
· Личное сообщение · #8

GodFather пишет:
ты не знаешь можно его как-нибудь оптимизировать или уже нельзя?

у тебя выполняется лишний шаг цикла(при edi == iCount). но это несущественно, так как отрисовки на нем нет.
в принципе мой вариант - то же самое, только без этого лишнего шага.



Ранг: 51.0 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 04 июля 2007 17:49
· Личное сообщение · #9

ах да, что еще забыл. посмотри описание функции Polyline



Ранг: 51.0 (постоянный)
Активность: 0.030
Статус: Участник

Создано: 04 июля 2007 21:44
· Личное сообщение · #10

И еще можно MoveToEx каждый раз не вызывать....
Короче, вот я написал на FASM:
the-matrex.nm.ru/polylines.zip



Ранг: 62.5 (постоянный), 2thx
Активность: 0.050
Статус: Участник

Создано: 24 июля 2007 21:34
· Личное сообщение · #11

тема закрыта


 eXeL@B —› Программирование —› ломаная на Masm32
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати