Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Графика, рисование, немного хелпа по рисованию линий 
:(
    Опции темы
JohnBonJovi
Дата 23.11.2012, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 25
Регистрация: 31.5.2009
Где: Красноярск

Репутация: нет
Всего: нет



Доброго дня.
Одной из задач было нарисовать аэродинамический профиль состоящий из дуг окружностей. Нарисовать - нарисовал, но ламерски, из точек, слившихся в линии. Требуется все же соединить точки линиями, тоесть получить ломанную, ее части понадобятся в расчетах далее.

Код подпрограммы рисования:

Код

subroutine ris  (N, xc, c, b, lz, betaz)
use dflib
integer status2, XE, YE, k, x1, y1, x2, y2, N
real  xc, c, b, xc1, c1, b1,lz1, r1, r2, x, y, lz, betaz, xz, yz
type (windowconfig) wc
type (xycoord) xy

status2 = setbkcolor(1)
call clearscreen($gclearscreen)
res = getwindowconfig (wc)
XE = wc.numxpixels
YE = wc.numypixels

status2 = setcolor(10)

xc1=xc/b
c1=c/b
b1=b/b 
lz1=lz/b
betaz=90-betaz


k=800*YE/XE

    r1=(((xc1)**2)/c1)+c1*0.25 !носик
    r2=(((1-xc1)**2)/c1)+c1*0.25 !хвостик

status2=setcolor(13)
status2=setpixel((XE/2)-(b1*k/2)+(xc1*k),YE/2)
status2=setpixel((XE/2)-(b1*k/2)+(xc1*k),(YE/2)-(c1*k/2))
status2=setpixel((XE/2)-(b1*k/2)+(xc1*k),(YE/2)+(c1*k/2))
status2=setpixel((XE/2)-(b1*k/2),YE/2)
status2=setpixel((XE/2)+(b1*k/2),YE/2)
status2=setpixel((XE/2)+(b1*k/2),YE/2)
status2=setpixel((XE/2)+(b1*k/2)-(lz1*k),(YE/2))
status2=setpixel((XE/2)+(b1*k/2)-lz1*k-(lz1*sind(-betaz)*k),(YE/2)+(lz1*cosd(betaz)*k))

    do x = 0, xc1, b1/N    ! носик-низ
    status2= setcolor(0)
    y=0.5*c1-r1+((r1**2)-(x-xc1)**2)**0.5

    x1=x*k+(XE/2)-(b1*k/2)
    y1=y*k+YE/2

    status2=setpixel(x1,y1)

    enddo
    do x = xc1, b1, b1/N    ! хвостик-низ
    status2= setcolor(7)
    y=0.5*c1-r2+((r2**2)-(x-xc1)**2)**0.5

    x1=x*k+(XE/2)-(b1*k/2)
    y1=y*k+YE/2

    status2=setpixel(x1,y1)
    enddo

    do x = xc1, b1, b1/N    !хвостик-верх
    status2= setcolor(0)
    y=0.5*c1-r2+((r2**2)-(x-xc1)**2)**0.5

    x1=x*k+(XE/2)-(b1*k/2)
    y1=-y*k+YE/2

    status2=setpixel(x1,y1)
    enddo

    do x = 0, xc1, b1/N    !носик-верх
    status2= setcolor(7)
    y=0.5*c1-r1+((r1**2)-(x-xc1)**2)**0.5

    x1=x*k+(XE/2)-(b1*k/2)
    y1=-y*k+YE/2

    status2=setpixel(x1,y1)

    enddo

    end subroutine


user posted image

Если в одном из циклов заменить status2=setpixel(x1,y1) на call moveto(x1, y1, xy); status2=lineto(x1,y1) то линия будет проведена из начала координат в вычисленную точку. Вот вроде не так сложно, но моих навыков не хватает, прошу помощи)
PM MAIL   Вверх
FCM
Дата 23.11.2012, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 461
Регистрация: 30.3.2009

Репутация: 8
Всего: 9



 см. пример в системе помощи для функций семейства LINETO

Это сообщение отредактировал(а) FCM - 23.11.2012, 15:38
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0954 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.