|
2D-программирование Вопросы, касающиеся двумерного программирования |
29.10.2005, 00:18
|
#1
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Подкинте ктонить идею как нарисовать треугольник произвольной формы полностью закрашеный имея координаты вершин и цвет заливки. (Это все надо в 2Д сделать).
Зарание спасибо!
|
(Offline)
|
|
29.10.2005, 00:30
|
#2
|
|
хе
рисуеш какнибудь квадрат - чтобы треугольник в нем был
перебираеш все точки квадрата
если точка находится в треугольнике - то рисуеш ее , если нет то идеш дальше
вот так
|
|
|
29.10.2005, 00:45
|
#3
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ентересный вариант... А квадрат рисовать зачем? (шучу)
|
(Offline)
|
|
29.10.2005, 00:46
|
#4
|
|
прямоугольник тоже можно нарисовать
|
|
|
29.10.2005, 00:56
|
#5
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Опять не пойму зачем его рисовать так ведь нужную часть экрана зарисовать можно.
|
(Offline)
|
|
29.10.2005, 01:00
|
#6
|
|
упс... очепятка ошибся - не рисовать а вообразить
|
|
|
29.10.2005, 01:44
|
#7
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
у меня такая версия, берешь алгоритм рисования линии (думаю рассказывать не надо) и делаешь линии от одной точки (допустим вершина) до точек на "основании" и делаешь так, линии проводишь по точкам типа рисуешь точку на одной линии и сразу на другой, дак вот, между этими точками рисуешь еще одну линию... и так до основания...
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
29.10.2005, 02:06
|
#8
|
Модератор
Регистрация: 13.09.2005
Сообщений: 1,835
Написано 6 полезных сообщений (для 10 пользователей)
|
извините, пока што не очень знаком с компелятором...
и не очень понял Саба..ток што извеняюсь если повторюсь...
но с алгоритмикой знаком...
можно рисовать линию в цикле от 0 до n, где n=sqr((x1+x2)^2+(y1+y2)^2) и i-пораметр цикла
линия(x3,y3)-(x1+i*(x2-x1)/n),y1+i*(y2-y1)/n)
____________________
вроде так норм
|
(Offline)
|
|
29.10.2005, 02:55
|
#9
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Транслируя на 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()
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
29.10.2005, 03:05
|
#10
|
Модератор
Регистрация: 13.09.2005
Сообщений: 1,835
Написано 6 полезных сообщений (для 10 пользователей)
|
для точности закраски
n=sqr((x1+x2)^2+(y1+y2)^2)*.. и тут любое число чем больше тем больше операций, но точнее будет што бы не остались незакрашенные пиксили
|
(Offline)
|
|
29.10.2005, 05:16
|
#11
|
Администратор
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений (для 996 пользователей)
|
братва! вы рулите!! ваш алгоритм круче! респект!
__________________
Как минимум я помог многим (с)
|
(Offline)
|
|
29.10.2005, 13:04
|
#12
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Originally posted by alex-mad@Oct 29 2005, 02:05 AM
для точности закраски
n=sqr((x1+x2)^2+(y1+y2)^2)*.. и тут любое число чем больше тем больше операций, но точнее будет што бы не остались незакрашенные пиксили
|
Неплохой алгоритм, только при увеличении числа "*.. " ничего не меняется, думаю из-за того, что координаты могут быть только целыми числами... поэтому и закрашивается неполностью, ща попробую алгоритм jimon'а, может лучше выйдет, но все равно спасибо!
|
(Offline)
|
|
29.10.2005, 14:36
|
#13
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Вот что получилось:
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 спасибо что направил в нужную сторону
|
(Offline)
|
|
31.10.2005, 16:42
|
#15
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Имхо, быстрее (и проще) всего будет собрать полигон, отрендерить его и сохранитв image.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:51.
|