Darkside  

Voltar   Darkside > Darkside > Comunidade

Responder
 
Thread Tools
landim
Trooper
 

Gamertag: rlandim Steam ID: ldmkz
Default Ajuda com Geometria

22-05-07, 21:18 #1
Estou com um problema do tamanho de um bonde aqui , então sei que tem um pessoal que faz matemática aqui e queria saber se alguem pode me ajudar?
Seguinte, tenho um poligono ou triangulo 3D. Então preciso saber como pegar a coordenada Z de um ponto (x,y) que está sobre ele...
Os valores que eu tenho são as coordenadas dos 3 vertices do poligono, e as coordenadas (x,y) do ponto...

 





landim is offline   Reply With Quote
walker
Trooper
 

22-05-07, 21:32 #2
Se vc tem um ponto x,y na base do triangulo 3D, forma um novo triangulo 2D, onde a largura da base desse novo triangulo vai ser a distância de um dos vértices até o ponto x,y. Então calcula a altura desse triângulo 2D, pronto, vc tem a coordenada Z do ponto.

walker is offline   Reply With Quote
Sh3lld3r
Trooper
 

Steam ID: sh3lld3r
22-05-07, 21:43 #3
Ajuda com GEOMETRIA ANALITICA para começar .

Agora vou aqui resgatar umas formulas

Sh3lld3r is offline   Reply With Quote
pl
Ewok
 

22-05-07, 21:54 #4
 

;D

pl is offline   Reply With Quote
Lipe
Trooper
 

22-05-07, 21:56 #5

Lipe is offline   Reply With Quote
Lipe
Trooper
 

22-05-07, 21:58 #6
Alí onde está (y,0,0) é (0,y,0), terno ordenado...

Lipe is offline   Reply With Quote
Lipe
Trooper
 

22-05-07, 22:00 #7
Nada a ver o q eu postei, hehehe, mas blz!

Lipe is offline   Reply With Quote
Sussa
Pit
 

Steam ID: sussa
22-05-07, 22:01 #8
Uma solução mais generica pra qualquer tipo de poligono é obtida através de visão robotica/visão computacional. Apesar de uma vez pronta servir pra qualquer coisa, definitivamente não é uma solução trivial.

Se não aparecer um modo mais simples me manda um email que nos trocamos ideia.
[email protected]

Sussa is offline   Reply With Quote
Lipe
Trooper
 

22-05-07, 22:04 #9
Explique-se melhor Pit! Como assim???

Lipe is offline   Reply With Quote
Sussa
Pit
 

Steam ID: sussa
22-05-07, 22:27 #10
Visão Robótica/Visão Computacional é o estudo de algoritmos que conseguem recuperar informação 3d/2d a partir de outro conjunto limitado de dados.
São técnicas ultra potentes que conseguem recuperar dados praticamente do além. Mas por sua vez, são mto pesadas e complexas. hehe

Eu fiz essa matéria, porém mais voltado pra obter informação a partir de fotos, mas creio que existe técnicas que ajudem o Landim. Por isso eu precisava conversar com ele caso não apareça solução melhor.

Se tiver mto curioso, escreve no google:
Computer Vision, Visão Robotica e etc.

Sussa is offline   Reply With Quote
Bone
inativo
 

22-05-07, 22:42 #11
é fácil se você usar detecção de colisão, criando um vetor que tem origem no (x,y,0) e direção (0,0,1)

colide ele com teu triangulo... e ve o ponto

Bone is offline   Reply With Quote
Bone
inativo
 

22-05-07, 22:43 #12
isso é claro se você tiver certeza que teu triangulo ta do lado positivo do eixo Z hehe

Bone is offline   Reply With Quote
Sussa
Pit
 

Steam ID: sussa
22-05-07, 22:49 #13
Então, mas minha duvida principal é se ele quer isso a nível de programação ou resolução algébrica. ehehe

Sussa is offline   Reply With Quote
Bone
inativo
 

22-05-07, 22:54 #14
Colisão de plano com uma reta (vetor)

direcaoDaReta * -( normalPlano dot origemDaReta + normalPlano dot origemPlano[no seu caso pode ser qq uma dos 3 vertices eu acho] / normalPlano dot direçãoDaReta ) + origemDaReta

ripei a fórmula de um algoritmo que eu achei aqui heuoheuoheuoehe acho mais seguro procurar no google só pra garantir :P é a fórmula de deteccao de colisao

Bone is offline   Reply With Quote
Alexandre
Trooper
 

22-05-07, 22:55 #15
eu teria que pensar pra responder. o max que posso fazer é um esboço:

chame de v1 = (x1,y1,z1) , v2 = (x2,y2,z2) e v3 = (x3,y3,z3) os vetores do R3 que representam os vertices do seu triangulo

1) encontre a equação do plano que passa por v1,v2,v3 (tal plano existe e é único)

essa equação pode ser escrita na forma de uma geratriz com dois graus de liberdade: P = { (x,y,z) | z = f(x,y) }, para alguma função (linear) f

2) pronto. O ponto A tem coordenadas x_a, y_a, f(x_a, y_a). (Basta vc "plugar" os valores x_a e y_a que você obterá univocamente a coordenada z dada por f(x_a, y_a)

Alexandre is offline   Reply With Quote
Alexandre
Trooper
 

22-05-07, 22:57 #16
o que pega aí é como obter a eq. do plano quando dados v1,v2,v3
não lembro como faz. procura no wikipedia por PLANE ou senão vê em algum livro de geometria e vetores ou geometria analitica

Alexandre is offline   Reply With Quote
Roger Young
Forever Young
 

22-05-07, 22:57 #17
bando de nerds

Roger Young is offline   Reply With Quote
mllr
Trooper
 

22-05-07, 23:04 #18
agreed roger

 

mllr is offline   Reply With Quote
colossus
Trooper
 

23-05-07, 01:46 #19
Essa é facil. Primeira faz a equação do plano. Como? Encontra uma reta perpendicular ao plano. Como? Encontra dois vetores que pertencem ao plano. Como? assim ó

Definindo os vértices do triangulo:
vertice 1 = (x1,y1,z1)
vertice 2 = (x2,y2,z2)
vertice 3 = (x3,y3,z3)

Encontrando os vetores:
V1 = (x1-x2,y1-y2,z1-z2) = (v1i, v1j, v1k)
V2 = (x3-x2,y3-y2,z3-z2) = (v2i, v2j, v2k)

Agora falta encontrar uma reta normal aos dois vetores, que será perpendicular ao plano tambem. Como? Produto Vetorial: V1 X V2
Ou seja, tem que encontrar o determinante da matriz

| i j k |
| v1i v1j v1k |
| v2i v2j v2k |

V3 = Det = ((v1j*v2k)-(v1k*v2j))i - ((v1i*v2k)-(v1k*v2i))j + ((v1i*v2j)-(v1j*v2i))k = (v3i, v3j, v3k)

Pronto, essa tripa enorme é perpendicular ao plano em que o triangulo está situado. O que falta agora? Usar esse vetor e um ponto no plano pra descobrir a equação do plano. Bom, temos 3 pontos conhecidos no plano, os vertices do triangulo. Primeiro, a equação do plano:

a(X-X0)+b(Y-Y0)+c(Z-Z0) = 0

onde x0,y0 e z0 são as coordenadas de um ponto conhecido no plano, e a,b e c são as componentes de um vetor perpendicular ao plano. Usando o vertice 2 do triangulo como ponto do plano e o vetor V3 calculado ali em cima como vetor perpendicular ao plano, temos:

v3i(X-v2i) + v3j(Y-v2j) + v3k(Z-v2k) = 0

Daí é só usar essa equação e as coordenadas x e y do teu ponto misterioso, que vc descobre o z. Escrevendo de um jeito mais direto, usando as coordenadas dos vértices do triangulo explicitamente a equação fica assim:

(((y1-y2)*(z3-z2))-((z1-z2)*(y3-y2)))*(X-(x3-x2)) - (((x1-x2)*(z3-z2))-((z1-z2)*(x3-x2)))*(Y-(y3-y2)) + (((x1-x2)*(y3-y2))-((y1-y2)*(x3-x2)))*(Z-(z3-z2)) = 0

Da próxima vez da os pontos direto pq achar essas coisas simbolicamente é um saco.

colossus is offline   Reply With Quote
Kirus
Guest
 

23-05-07, 02:51 #20
Dah pra fazer usando notacao vetorial tb, o que pode facilitar ou dificultar dependendo do seu caso. A equacao do plano tambem pode ser escrita assim:

N.(R-P)=0

N eh o vetor normal (perpendicular) ao plano do triangulo.
R eh um vetor qualquer (x,y,z)
P eh um ponto que voce sabe com certeza que esta no plano ("O seu Vertice 1" por exemplo)

To usando maiuscula pra vetores, e o ponto eh produto escalar.

Um jeito de saber se o ponto A esta dentro do triangulo seria:

a) Verificar se ele esta contido no plano
b) Verificar se ele esta do lado de dentro do triangulo

a) Pra verificar se ele esta contido no plano, primeiro agente acha a equacao geral do plano e depois verifica se o seu

ponto A satisfaz a dita cuja.

Exemplo:

Para os pontos (indicados por vetores):

V1=(1,-1,1)
V2=(2,-2,2)
V3=(2,0,3)

Pra achar o vetor normal eh soh fazer o produto vetorial de dois vetores paralelos ao plano:

V13=V3-V1=(1,1,2)
V12=V2-V1=(1,-1,1)

Esses sao vetores que correspondem a dois dos lados do seu triangulo certo? Entao:

N=V12 x V13 = (3,1,-2)

x indica produto vetorial

Pra "P" eu escolhi o V1; P=V1=(1,-1,1)

Entao a equacao do plano fica: (3,1,-2).(R-(1,-1,1))'=0
O "'" eh pra transpor o vetor resultante e deixar ele com as dimensoes certas pra multiplicacao.

Se vc quer saber se um ponto esta contido no plano basta colocar ele como R. Pegando o ponto V3 por exemplo:

(3,1,-2).(V3-(1,-1,1))'= (3,1,-2).((2,0,3)-(1,-1,1))'=(3,1,-2).(1,1,2))'=0
Como 0=0 o ponto tah no plano.

b) Nao lembro de um jeito facil de saber se o tal ponto esta do lado de dentro ou do lado de fora do triangulo.

Pra simplificar, o que voce pode fazer eh pegar soh a projecao em x,y e ver se A(x,y) esta dentro dele.


Fontes:
http://www.mat.ufmg.br/gaal/aulas_online/at4_02.html
http://en.wikipedia.org/wiki/Plane_%28mathematics%29
http://en.wikipedia.org/wiki/Dot_product
http://en.wikipedia.org/wiki/Vector_product

PS: Acabei repetindo um monte de coisa que o colossus jah disse. ehahehhe

  Reply With Quote
Demé
Trooper
 

23-05-07, 08:59 #21
wtf
eaohaehioeau
ODEIO GEOMETRIA ANALÍTICA!
mas tenho que aprender né, fazer o que =P
go go 3 anos sem entrar na facul!

Demé is offline   Reply With Quote
predator
Back to the U.S.A.
 

Gamertag: decapentaplegic PSN ID: decapentaplegic Steam ID: decapentaplegic
23-05-07, 10:13 #22
geoanal (ou gel anal) sux

predator is offline   Reply With Quote
Holocaust
Trooper
 

Steam ID: holozinho
23-05-07, 10:49 #23
ainda bem que nem precisei fazer nada já responderam

Holocaust is offline   Reply With Quote
ZeroCarontE
Trooper
 

23-05-07, 16:52 #24
eh isso mesmo q o colossus, disse, mas isso eh pra achar se o ponto estah no PLANO a qual o triangulo pertence
dae complementando, um jeito de saber se o ponto P pertence ao triangulo q possui vertices em T1, T2 e T3 eh:
- somar o angulo formado pelos ponto Tx P Ty e verificar se deu 2pi (a soma dos angulos internos de um poligono CONVEXO em qq ponto pertencente ao poligono eh 2pi).. e eu nao sei como provar q achando 2pi, entao ele eh interno, mas confia em mim q funciona uhauhahuahua
ae pra descobrir o angulo entre Tx P e Ty:
- por exemplo: T1 e T2 no ponto P
- vc vai ter o vetor PT1 e PT2, e quer descobrir o angulo entre eles.. pra isso, eh soh usar produto escalar.. formula de produto escalar entre u e v:
u.v = |u| |v| cos a
ae vc isola o cosseno e pega o arco cosseno pra descobrir a
a = arccos( (u.v) / (|u||v|) )
- pronto, eh soh aplicar isso entre PT1 e PT2, PT2 e PT3, dps PT3 e PT1, somar, ver se deu 2pi \o/

PS: PRIMEIRO verifica se o ponto pertence ao plano, depois soma os angulos.. essa de somar angulo funciona em 2D, entao se o ponto nao pertencer ao plano, isso nao garante nada

ZeroCarontE is offline   Reply With Quote
colossus
Trooper
 

23-05-07, 18:44 #25
É isso aí ZeroCaronte, nem sabia dessa soma q dá 2pi. Mas como ele tem só o x e o y do ponto, e não define o z, fica mais facil de ver se ele ta no triangulo fazendo uma projeção no plano xy, marcar os vertices e depois marcar o ponto. Se o ponto ficar dentro, ta dentro, senao, nao. ehauhea Mas se o cara disse que o ponto ta no triangulo, quem sou eu pra duvidar? heauehaua
Gamma, eu tive prova disso ano passado, e to usando essas coisas ainda. Tu fez todos os Calculos devia saber essas merdas aí tambem eahuehuae

colossus is offline   Reply With Quote
Flavio_0
Trooper
 

23-05-07, 19:04 #26
uma vez eu resolvi um problemaço foda q nego postou aki
lembro q ate repercurtiu blz a resposta vou ver se acho pra pstar aki
hehehe

Flavio_0 is offline   Reply With Quote
jacu
Trooper
 

23-05-07, 19:57 #27
e aí, já resolveram? Se tiverem resolvido nem vou me dar ao trabalho de postar.

jacu is offline   Reply With Quote
oz
Trooper
 

23-05-07, 20:02 #28
que coisa inútil

oz is offline   Reply With Quote
ZeroCarontE
Trooper
 

23-05-07, 20:38 #29
AHHHHHHHH PUTZ
agora q eu li denovo oq ele queria saber, achei q ele quisesse saber SE o ponto esta dentro do triangulo

dae a solução vira achar o plano (como o colossus jah disse), e depois achar a colisao entre o ponto (x,y) q vc tem com o plano q vc encontrou.. como fazer isso tah no post do bone (sendo q a direção tem q ser normalizada, se nao me engano, pra nao dar caca na hj do produto escalar)

ZeroCarontE is offline   Reply With Quote
landim
Trooper
 

Gamertag: rlandim Steam ID: ldmkz
23-05-07, 21:31 #30
Oz, nem é inútil, isso ae é praticamente a fórmula da vida pra muita coisa 3D...

Pit o preciso resolver o problema em nível de programação mesmo, estou tentando fazer algumas coisas em MaxScript, então acabou aparecendo esse problema ai, de todo jeito aparece no msn homem, você sumiu, até pensei você tinha me deletado, mas o churrasqueiro disse que parece que você está sumido mesmo...

Colossus te amo cara \o/, ZeroCarontE também cara, ajudou bastante sim, complementou uma coisa que eu estava fazendo na base da gambiarra, maisinho para vocês, vou implementar ainda hoje. Só pude responder agora prq inventaram de colocar um proxy no meu trampo, e ele classifica a DS como site de game, sendo que muita coisa séria também se resolve aqui, foda
Valeu caras.

landim is offline   Reply With Quote
landim
Trooper
 

Gamertag: rlandim Steam ID: ldmkz
25-05-07, 21:39 #31
Acho que viajei legal, mas seria isso?
Code:
        protected Vector3 RetornaAltura(Vector3 vtPonto, Vector3 V1, Vector3 V2, Vector3 V3)
        {
            Vector3 VT1 = Vector3.Zero;
            Vector3 VT2 = Vector3.Zero;
            Vector3 VT3 = Vector3.Zero;  

            //Encontrando os vetores:
            VT1.X = (V1.X - V2.X);
            VT1.Y = (V1.Y - V2.Y);
            VT1.Z = (V1.Z - V2.Z);

            VT2.X = (V3.X - V2.X);
            VT2.Y = (V3.Y - V2.Y);
            VT2.Z = (V3.Z - V2.Z);

            //V3 = V1 X V2
            VT3.X = ((VT1.Y * VT2.Z) - (VT1.Z * VT2.Y));
            VT3.Y = ((VT1.X * VT2.Z) - (VT1.Z * VT2.X));
            VT3.Z = ((VT1.X * VT2.Y) - (VT1.Z * VT2.X));
            
            Vector3 vtNovoPonto = Vector3.Zero;
            vtNovoPonto.X = vtPonto.X;
            vtNovoPonto.Y = vtPonto.Y; 
            vtNovoPonto.Z = (((VT1.Y - VT2.Y) * (VT3.Z - VT2.Z)) - ((VT1.Z - VT2.Z) * (VT3.Y - VT2.Y))) * (vtPonto.X - (VT3.X - VT2.X)) - 
                            (((VT1.X - VT2.X) * (VT3.Z - VT2.Z)) - ((VT1.Z - VT2.Z) * (VT3.X - VT2.X))) * (vtPonto.Y - (VT3.Y - VT2.Y)) + 
                            (((VT1.X - VT2.X) * (VT3.Y - VT2.Y)) - ((VT1.Y - VT2.Y) * (VT3.X - VT2.X))) * (vtPonto.Z - (VT3.Z - VT2.Z));

            return vtNovoPonto;

        }

landim is offline   Reply With Quote
Responder

Thread Tools

Regras de postagem
Você não pode criar novos tópicos
Você não pode postar
Você não pode enviar anexos
Você não pode editar seus posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Atalho para Fóruns



O formato de hora é GMT -3. horário: 08:45.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.