2009-11-25 31 views
15

Looking for cách nhanh nhất để tính toán một điểm nằm trên một đường thẳng một khoảng cách cho đi từ điểm cuối dòng:Cho một khởi đầu và điểm cuối, và một khoảng cách, tính toán một điểm dọc theo một đường

void calculate_line_point(int x1, int y1, int x2, int y2, int distance, int *px, int *py) 
{ 
    //calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2 
    *px = ??? 
    *py = ??? 
} 

Cảm ơn bạn đã trả lời, không có điều này không phải là bài tập về nhà, chỉ cần một số hack từ lĩnh vực chuyên môn bình thường của tôi.

Đây là chức năng được đề xuất bên dưới. Nó không hoạt động. Nếu tôi tính điểm mỗi 5 độ ở góc trên bên phải 90 độ của vòng tròn làm điểm bắt đầu và gọi hàm bên dưới với tâm của vòng tròn là x2, y2 với khoảng cách 4 điểm kết thúc là hoàn toàn sai. Chúng nằm bên dưới và bên phải của trung tâm và chiều dài là miễn là điểm trung tâm. Bất cứ ai có bất cứ đề nghị?

void calculate_line_point(int x1, int y1, int x2, int y2, int distance) 
{ 

//calculate a point on the line x1-y1 to x2-y2 that is distance from x2-y2 

    double vx = x2 - x1; // x vector 
    double vy = y2 - y1; // y vector 

    double mag = sqrt(vx*vx + vy*vy); // length 

    vx /= mag; 
    vy /= mag; 

// calculate the new vector, which is x2y2 + vxvy * (mag + distance). 

    px = (int) ((double) x2 + vx * (mag + (double)distance)); 
    py = (int) ((double) y2 + vy * (mag + (double)distance)); 

}

tôi đã tìm thấy this giải pháp trên stackoverflow nhưng không hiểu nó hoàn toàn, bất cứ ai có thể làm rõ?

+4

Có lẽ bạn nên sử dụng phao nổi/đôi, bởi vì bạn sẽ nhận được roundi ng lỗi. Đây có thể là một mối quan tâm. – Lucas

+1

Điều Lucas nói. Ngoài ra, bạn có thể đọc bài của tôi trong khi tôi đã có một lỗi đánh máy. Nếu x1y1 là nguồn gốc, bạn muốn x1y1 + vxvy * (mag + distance), không phải x2y2. Tức là, bắt đầu từ nguồn gốc, bạn muốn di chuyển khoảng cách _to x2y2_ cộng với khoảng cách bổ sung, sử dụng hướng từ x1y1 đến x2y2. Mặc dù tôi nghĩ bạn có thể muốn thuật lại câu hỏi của mình. chính xác là bạn muốn làm gì? Câu hỏi như bây giờ có vẻ giống như một vấn đề trung gian. –

+0

[Hình học: Tìm một điểm dọc theo một đường một khoảng cách nhất định từ một điểm khác!] (Http://math.stackexchange.com/questions/175896/finding-a-point-along-a-line-a-certain- khoảng cách-xa-từ-điểm khác/1630886 # 1630886) –

Trả lời

33

Tôi nghĩ điều này thuộc về MathOverflow, nhưng tôi sẽ trả lời vì đây là bài đăng đầu tiên của bạn. Trước tiên, bạn tính toán vector từ x1y1 để x2y2:

float vx = x2 - x1; 
float vy = y2 - y1; 

Sau đó tính toán chiều dài:

float mag = sqrt(vx*vx + vy*vy); 

Đồng hóa vector để đơn vị chiều dài:

vx /= mag; 
vy /= mag; 

Cuối cùng tính toán vector mới, đó là x2y2 + vxvy * (mag + khoảng cách).

*px = (int)((float)x1 + vx * (mag + distance)); 
*py = (int)((float)y1 + vy * (mag + distance)); 

Bạn có thể bỏ qua một số phép tính nhân với khoảng cách/mag thay thế.

+16

thật không may, quá trình toán học quá lố bịch để giải trí loại câu hỏi này; nó thuộc về đây. –

+0

Thật không may. –

+1

Xin lỗi nếu đó là những kẻ quá đơn giản, hoàn toàn nằm ngoài phạm vi thẩm quyền bình thường của tôi. Cảm ơn đã giúp đỡ. – amanda

1

Những phương trình này là sai:

px = (int) ((double) x2 + vx * (mag + (double)distance)); 

py = (int) ((double) y2 + vy * (mag + (double)distance)); 

Các phương trình đúng là:

px = (int) ((double) x2 + vx * (double)distance); 

py = (int) ((double) y2 + vy * (double)distance); 

Tom

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