forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Есть вопросик (http://forum.boolean.name/showthread.php?t=261)

pax 29.10.2005 00:18

Подкинте ктонить идею как нарисовать треугольник произвольной формы полностью закрашеный имея координаты вершин и цвет заливки. (Это все надо в 2Д сделать).

Зарание спасибо!

jimon 29.10.2005 00:30

хе :)
рисуеш какнибудь квадрат - чтобы треугольник в нем был
перебираеш все точки квадрата
если точка находится в треугольнике - то рисуеш ее , если нет то идеш дальше :)

вот так

pax 29.10.2005 00:45

Ентересный вариант... А квадрат рисовать зачем? (шучу) :)

jimon 29.10.2005 00:46

прямоугольник тоже можно нарисовать

pax 29.10.2005 00:56

Опять не пойму зачем его рисовать :dontknow: так ведь нужную часть экрана зарисовать можно.

jimon 29.10.2005 01:00

упс... очепятка :) ошибся - не рисовать а вообразить

SubZer0 29.10.2005 01:44

у меня такая версия, берешь алгоритм рисования линии (думаю рассказывать не надо) и делаешь линии от одной точки (допустим вершина) до точек на "основании" и делаешь так, линии проводишь по точкам типа рисуешь точку на одной линии и сразу на другой, дак вот, между этими точками рисуешь еще одну линию... и так до основания...

:rolleyes:

alex-mad 29.10.2005 02:06

извините, пока што не очень знаком с компелятором...
и не очень понял Саба..ток што извеняюсь если повторюсь...
но с алгоритмикой знаком...
можно рисовать линию в цикле от 0 до n, где n=sqr((x1+x2)^2+(y1+y2)^2) и i-пораметр цикла
линия(x3,y3)-(x1+i*(x2-x1)/n),y1+i*(y2-y1)/n)
____________________
вроде так норм

impersonalis 29.10.2005 02:55

Транслируя на B3D:
Код:

x1=10
 y1=0
x2=10
y2=10
x3=90
y3=20
Color 255,0,0

n=Sqr((x1+x2)^2+(y1+y2)^2)
For i=1 To n
Line x3,y3,x1+i*(x2-x1)/n,y1+i*(y2-y1)/n

Next
Flip
WaitKey()


alex-mad 29.10.2005 03:05

для точности закраски
n=sqr((x1+x2)^2+(y1+y2)^2)*.. и тут любое число чем больше тем больше операций, но точнее будет што бы не остались незакрашенные пиксили

SubZer0 29.10.2005 05:16

братва! вы рулите!! ваш алгоритм круче! респект! :)

pax 29.10.2005 13:04

Цитата:

Originally posted by alex-mad@Oct 29 2005, 02:05 AM
для точности закраски
n=sqr((x1+x2)^2+(y1+y2)^2)*.. и тут любое число чем больше тем больше операций, но точнее будет што бы не остались незакрашенные пиксили

Неплохой алгоритм, только при увеличении числа "*.. " ничего не меняется, думаю из-за того, что координаты могут быть только целыми числами... поэтому и закрашивается неполностью, ща попробую алгоритм jimon'а, может лучше выйдет, но все равно спасибо! :)

pax 29.10.2005 14:36

Вот что получилось:

Код:

Function TriGon(X1%,Y1%,X2%,Y2%,X3%,Y3%)
        Local Temp%
;Сортировка координат
        If Y2<Y1 Then
 *Temp%=Y1: Y1=Y2: Y2=Temp%
 *Temp%=X1: X1=X2: X2=Temp%
        EndIf
        If Y3<Y2 Then
 *Temp%=Y2: Y2=Y3: Y3=Temp%
 *Temp%=X2: X2=X3: X3=Temp%
        EndIf
        If Y2<Y1 Then
 *Temp%=Y1: Y1=Y2: Y2=Temp%
 *Temp%=X1: X1=X2: X2=Temp%
        EndIf
 *
        K1#=Float(x2-x1)/Float(y2-y1)
        B1#=-y1*K1+X1
        K2#=Float(x3-x1)/Float(y3-y1)
        B2#=-y1*K2+X1
        For Y=Y1 To Y2
 *Line(Y*K2+B2,Y,Y*K1+B1,Y)
        Next
       
        K1#=Float(x2-x3)/Float(y2-y3)
        B1#=-y3*K1+X3
        For Y=Y2+1 To Y3
 *Line(Y*K2+B2,Y,Y*K1+B1,Y)
        Next
End Function

Незнаю на чей алгоритм этот похож, но вроде работает.

2jimon спасибо что направил в нужную сторону :)

jimon 29.10.2005 16:50

незачто :)

impersonalis 31.10.2005 16:42

Имхо, быстрее (и проще) всего будет собрать полигон, отрендерить его и сохранитв image.


Часовой пояс GMT +4, время: 10:42.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot