Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование в широком смысле слова > Математика

Математика Методы математического моделлирования, программирование математических концепций, роль математики в создании игр

Ответ
 
Опции темы
Старый 30.01.2009, 19:57   #1
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Координаты в изометрии

Собсно, сабж.
Просидел над этой фигней полдня. Идея простая - спроецировать координаты из нашей прямоугольной системы на оси изометрической. И формулу даже получил, но видно где-то ошибся. Не работает И гугль молчит.
Прошу помочь

ЗЫ. Острый угол ромба, если что 2*arctg(.5) ~ 53 градуса
Миниатюры
Нажмите на изображение для увеличения
Название: Pic.PNG
Просмотров: 1200
Размер:	24.8 Кб
ID:	5306  

Последний раз редактировалось MiXaeL, 30.01.2009 в 20:13.
(Offline)
 
Ответить с цитированием
Старый 30.01.2009, 22:15   #2
zheland
Разработчик
 
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений
(для 95 пользователей)
Ответ: Координаты в изометрии

Вот написал программу за 30 минут:
Там найдёшь разные формулы
Для наклона плоскости крути колёсико мышы
SuperStrict
Global x : Float
Global y : Float
Global n : Float
Global px1 : Short
Global py1 : Short = 300
Global px2 : Short = 500
Global py2 : Short
Global px3 : Short
Global py3 : Short = 300
Global px4 : Short = 500
Global py4 : Short
Global px5 : Short
Global py5 : Short = 300
Global px6 : Short = 500
Global py6 : Short
Global px7 : Short
Global py7 : Short = 300
Global px8 : Short = 500
Global py8 : Short
Graphics 800,600,0,0
While Not KeyDown(KEY_ESCAPE)
Cls
SetColor 255,255,255
If MouseX() > 200 Then MoveMouse(200,MouseY())
If MouseY() > 200 Then MoveMouse(MouseX(),200)
DrawLine 0 , 200 , 200 , 200
DrawLine 200 , 0 , 200 , 200
DrawLine 200 , 0 , 200 , 600
DrawText "isometry test v 1.0",0,200
DrawText "MouseX: "+MouseX(),0,350
DrawText "MouseY: "+MouseY(),0,360
DrawText "MouseZ: "+MouseZ(),0,370
DrawText "21:12 30.01.2009",0,560
DrawText "Zheleznov",0,570
DrawText "Andrey Ivanovich",0,580
If  MouseZ()>0
px1=200
py2=MouseZ()
px3=800
py4=600-MouseZ()
Else
px1=200-MouseZ()
py2=0
px3=800+MouseZ()
py4=600
End If
For n = 0 To 1.01 Step 0.1
SetColor 0,0,255
DrawLine px2-(px2-px1)*n,py2-(py2-py1)*n,px3-(px3-px4)*n,py3-(py3-py4)*n
DrawLine px2-(px2-px3)*n,py2-(py2-py3)*n,px1-(px1-px4)*n,py1-(py1-py4)*n
Next
x=Float(MouseX())/200
y=Float(MouseY())/200
SetColor 0,255,0
px5 = px2-(px2-px1)*x
py5 = py2-(py2-py1)*x
px6 = px3-(px3-px4)*x
py6 = py3-(py3-py4)*x
px7 = px2-(px2-px3)*y
py7 = py2-(py2-py3)*y
px8 = px1-(px1-px4)*y
py8 = py1-(py1-py4)*y
DrawLine px5 , py5 , px6 , py6
DrawLine px7 , py7 , px8 , py8
SetColor 255,0,0
DrawRect px5-(px5-px6)*y-5,py7-(py7-py8)*x-5,10,10
Flip
Wend
End
*Сделал быстро: это можно очень сильно улучшить
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
MiXaeL (30.01.2009)
Старый 30.01.2009, 22:45   #3
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Ответ: Координаты в изометрии

Честно говоря, не слишком вкурил все это, но все равно спасибо.

А ответ (в моем случае) такой:
y'=(x+2*y)/2/Cos(alpha)
x'=(x-2*y)/2/Cos(alpha)
alpha=2*arctg(1/2)

Аффинные преобразования и матрицы рулят
(Offline)
 
Ответить с цитированием
Старый 30.01.2009, 23:32   #4
zheland
Разработчик
 
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений
(для 95 пользователей)
Ответ: Координаты в изометрии

А зачем синусы и косинусы, они вообще не нужны?
Я всё сделал как надо? или не то сделал?
(Offline)
 
Ответить с цитированием
Старый 30.01.2009, 23:37   #5
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Ответ: Координаты в изометрии

Да, у тебя было как надо, но, повторяю, не очень я понял программу. 16 однообразных переменных без комментариев - это тяжко))
Пришлось вспоминать лекции по аналиту
(Offline)
 
Ответить с цитированием
Старый 31.01.2009, 00:25   #6
zheland
Разработчик
 
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений
(для 95 пользователей)
Ответ: Координаты в изометрии

n-просто переменная для цикла
Другие переменные узнаешь здесь:
Нажмите на изображение для увеличения
Название: isometry.JPG
Просмотров: 1326
Размер:	8.7 Кб
ID:	5310
(Offline)
 
Ответить с цитированием
Старый 31.01.2009, 05:49   #7
MiXaeL
Бывалый
 
Аватар для MiXaeL
 
Регистрация: 22.08.2006
Сообщений: 700
Написано 146 полезных сообщений
(для 267 пользователей)
Ответ: Координаты в изометрии

Ок, понятно.
(Offline)
 
Ответить с цитированием
Старый 31.01.2009, 16:56   #8
zheland
Разработчик
 
Регистрация: 18.10.2007
Сообщений: 349
Написано 64 полезных сообщений
(для 95 пользователей)
Ответ: Координаты в изометрии

Вот новая версия:
Более удобно сделано,
и теперь можно изменять как хочешь точки
pxy[0]-pxy[3]
все вершины теперь прономерованы так
pxy[0]-pxy[7]=pxy1-pxy8
Нажмите на изображение для увеличения
Название: isometry.JPG
Просмотров: 1648
Размер:	8.6 Кб
ID:	5315
можно даже скручивать поле
можно так добиться красивого эффекта появления карты
Нажмите на изображение для увеличения
Название: isometry2.GIF
Просмотров: 1380
Размер:	16.2 Кб
ID:	5314
SuperStrict
Global current : Byte = 0
Global cx : Float
Global cy : Float
Global n : Float
Global px : Short[8]
Global py : Short[8]
px[0] = 200
py[0] = 300
px[1] = 500
py[1] = 0
px[2] = 800
py[2] = 300
px[3] = 500
py[3] = 600
Graphics 800,600,0,0
While Not KeyDown(KEY_ESCAPE)
Cls
SetColor 255,255,255
If MouseX() > 200 Then MoveMouse(200,MouseY())
If MouseY() > 200 Then MoveMouse(MouseX(),200)
DrawLine 200 , 200 , 200 , 600
DrawText "isometry test v 1.1",0,200

DrawText "MouseX: "+MouseX(),0,300
DrawText "MouseY: "+MouseY(),0,310
DrawText "px[0]: "+px[0]+"; py[0]: "+py[0],0,330
DrawText "px[1]: "+px[1]+"; py[1]: "+py[1],0,340
DrawText "px[2]: "+px[2]+"; py[2]: "+py[2],0,350
DrawText "px[3]: "+px[3]+"; py[3]: "+py[3],0,360
DrawText "px[4]: "+px[4]+"; py[4]: "+py[4],0,370
DrawText "px[5]: "+px[5]+"; py[5]: "+py[5],0,380
DrawText "px[6]: "+px[6]+"; py[6]: "+py[6],0,390
DrawText "px[7]: "+px[7]+"; py[7]: "+py[7],0,400
DrawText "cx : "+cx,0,410
DrawText "cy : "+cy,0,420

DrawText "current point: pxy["+current+"]",0,460
DrawText "USE KEYS:",0,470
DrawText "0,1,2,3 TO SET CURRENT",0,480
DrawText "LEFT; RIGHT; UP; DOWN",0,490
DrawText " TO MOVE",0,500

DrawText "31.01.2009",0,560
DrawText "Zheleznov",0,570
DrawText "Andrey Ivanovich",0,580

If KeyDown(KEY_0) Then current=0
If KeyDown(KEY_1) Then current=1
If KeyDown(KEY_2) Then current=2
If KeyDown(KEY_3) Then current=3
If KeyDown(KEY_LEFT) Then px[current]:-1
If KeyDown(KEY_RIGHT) Then px[current]:+1
If KeyDown(KEY_UP) Then py[current]:-1
If KeyDown(KEY_DOWN) Then py[current]:+1

SetColor 0,0,255
For n = 0 To 1.01 Step 0.1
DrawLine 200*n,0,200*n,200
DrawLine 0,200*n,200,200*n
DrawLine px[1]-(px[1]-px[0])*n,py[1]-(py[1]-py[0])*n,px[2]-(px[2]-px[3])*n,py[2]-(py[2]-py[3])*n
DrawLine px[1]-(px[1]-px[2])*n,py[1]-(py[1]-py[2])*n,px[0]-(px[0]-px[3])*n,py[0]-(py[0]-py[3])*n
Next
cx=Float(MouseX())/200
cy=Float(MouseY())/200
SetColor 0,255,0
px[4] = px[1]-(px[1]-px[0])*cx
py[4] = py[1]-(py[1]-py[0])*cx
px[5] = px[2]-(px[2]-px[3])*cx
py[5] = py[2]-(py[2]-py[3])*cx
px[6] = px[1]-(px[1]-px[2])*cy
py[6] = py[1]-(py[1]-py[2])*cy
px[7] = px[0]-(px[0]-px[3])*cy
py[7] = py[0]-(py[0]-py[3])*cy
DrawLine 200*cx-2,0,200*cx-2,200
DrawLine 0,200*cy-2,200,200*cy-2
DrawLine px[4] , py[4] , px[5] , py[5]
DrawLine px[6] , py[6] , px[7] , py[7]
SetColor 255,0,0

DrawRect 200*cx-2,200*cy-2,5,5
DrawRect px[4]-(px[4]-px[5])*cy-5,py[6]-(py[6]-py[7])*cx-5,10,10
Flip
Wend
End

Последний раз редактировалось zheland, 31.01.2009 в 17:01.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
MiXaeL (31.01.2009)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перемещение и координаты Peter 3D-программирование 6 27.08.2009 15:49
Текстурные координаты вручник Lighthouse 3D-программирование 3 19.07.2009 14:00
Координаты крысы в 3Д shybovycha PureBasic 9 18.06.2007 17:42
Координаты Fant 3D-программирование 7 08.02.2007 21:36
Координаты бушуют Progger_Leo 3D-программирование 7 27.12.2006 20:54


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com