2010-02-25 39 views
7

Có ai có thể cung cấp ví dụ về hàm trả về sản phẩm chéo của HAI vectơ 2d không? Tôi đang cố triển khai this algorithm.Sản phẩm chéo của 2 vectơ 2D

Mã C sẽ tuyệt vời. Cảm ơn.


EDIT: tìm thấy một todo cách nó làm việc cho 2D và chết dễ dàng.

bool tri2d::inTriangle(vec2d pt) { 
    float AB = (pt.y-p1.y)*(p2.x-p1.x) - (pt.x-p1.x)*(p2.y-p1.y); 
    float CA = (pt.y-p3.y)*(p1.x-p3.x) - (pt.x-p3.x)*(p1.y-p3.y); 
    float BC = (pt.y-p2.y)*(p3.x-p2.x) - (pt.x-p2.x)*(p3.y-p2.y); 

    if (AB*BC>0.f && BC*CA>0.f) 
     return true; 
    return false;  
} 
+0

là thứ dành cho công việc hay làm việc nhà? – legends2k

+0

Đây là để thưởng thức cá nhân. Tại sao? –

+0

dup http://stackoverflow.com/questions/243945/calculating-a-2d-vectors-cross-product –

Trả lời

15

(Lưu ý: Các chéo sản phẩm của 2 vectơ chỉ được xác định trong không gian 3D và 7D spaces.)

Mã này tính toán z -component của 2 vectơ nằm trên xy -plane:

vec2D a, b; 
... 
double z = a.x * b.y - b.x * a.y; 
return z; 
+0

Rất tiếc. Bạn muốn cung cấp cho bạn thêm +1 cho liên kết đó! – AakashM

+2

@ tm1rbrt: Đó là 'CrossProduct' phải là một sản phẩm 3D hoàn chỉnh. Bạn luôn có thể thêm lại hai thành phần 0. – kennytm

+1

Sản phẩm chéo của hai vec-tơ trong không gian 3D là một véc tơ 3D, nhưng mã của bạn chỉ trả về gấp đôi. Thành phần nào tốt? – duffymo

Các vấn đề liên quan