2011-03-08 16 views
7

Öyleyse, çalışmak için bir ayırma ekseni teoremi algoritması almaya çalışıyorum (çarpışma tespiti için) ve bir nokta ile çizgi arasındaki minimum dikey vektörü bulmam gerekiyor. Asgari dikey mesafeyi (nasıl bulacağımı biliyorum) değil, bu mesafeyle aynı büyüklüğe sahip olan ve rastgele bir noktadan ve çizgi üzerindeki bir noktadan geçen vektörü istemiyorum. Noktanın yerini, çizgideki bir noktayı ve çizginin yönünü veren bir birim vektörünü biliyorum.Bir nokta ile çizgi arasındaki en küçük dikey vektör

Yapmaya çalıştığım şey önce nokta ve çizgi arasındaki minimum mesafeyi bulmaktı.

sonraki kısmı kafa ama: 1) hattı üzerinde nokta ve çizgi artı biriminde noktası arasındaki vektör Bulunan) I 2 bilmek nokta ve çizgi üzerinde nokta arasındaki vektör Bulunan hattının yönünü veren vektör 3) Bu iki vektörün çapraz çarpımını aldım (Bu çapraz çarpımı A olarak adlandıracağım) 4) Çizgi vektörünü ve çarpı yönünü veren birim vektörünün çapraz çarpımını ürün A (Bu çapraz ürün B'yi ararım) 5) Normalleştirilmiş çapraz ürün B 6) Ölçekli çapraz ürün B minimum mesafe ile

boşaltım sefil başarısız oldu. Bu vektörü nasıl bulacağımı bana kim söyleyebilir? Sorunuzu doğru anladıysam

+0

Bunu yapmak için bir program yazma ya da sadece Fizik/Calc ödevlerini yapmaya çalışıyoruz? –

+2

Bu eğlence için yazdığım bir oyun için, dediğim gibi çarpışma tespiti için. – user421215

cevap

24

, bu aradığınız şey olduğuna inanıyoruz:

dönem nokta çarpım temsil
P - point 
D - direction of line (unit length) 
A - point in line 

X - base of the perpendicular line 

    P 
    /| 
/| 
/v 
A---X----->D 

(P-A).D == |X-A| 

X == A + ((P-A).D)D 
Desired perpendicular: X-P 

| X-A | büyüklük demektir. Yukarıdaki Şekilden

+0

Sadece açıklığa kavuşturmak için. dot ürününün tam anlamı nedir? – user421215

+0

Sağ. "Dönem" ile kastettiğim buydu :) – Pablo

+0

üzgünüm bunu kaçırdı. Her neyse, çalışmak istediği gibi görünüyor ama bir sebepten SAT algoritmam biraz kapalı. Olmaması gereken şeyler çarpışıyor. Bana verdiğiniz şey muhtemelen çarpışmalar artık daha doğru göründüğü için çalışıyor ve şu anda hedefe daha çok benzeyen her türlü işaretleyicim var. Çok teşekkür ederim ama maalesef kodda başka bir çeşit hata yaptım. – user421215

2

enter image description here

şunlara sahip:

q = p + s --> s = q - p = q - (p2-p1) = q + p1 - p2 

==> s^ = |q - p2 - p1|/|s| (unitary vector) 

Also: |s| = |q| sin c = |q|sin(b-a) 

b = arcsin (qy/|q|); a = arcsin(p1y/|p1|) 

where: |q| = (qx^2 + qy^2)^1/2 
İlgili konular