30/09/2018, 16:33

Xin code phép tịnh tiến trong mặt phẳng

ai có code phép tịnh tiến trong mặt phẳng không cho e xin với
tìm mãi mà không thấy

Sáng Béo viết 18:47 ngày 30/09/2018

tịnh tiến vector trong mặt phẳng?

Độc Cô Kiếm Ma viết 18:33 ngày 30/09/2018

tức là tịnh tiến 1 đoạn thẳng hay một hình trong mặt phẳng ý ạ

Sáng Béo viết 18:44 ngày 30/09/2018

thế bạn biết tịnh tiến 1 điểm chưa

Độc Cô Kiếm Ma viết 18:45 ngày 30/09/2018

chưa bác ạ, e mới học nên cũng chẳng biết đằng nào mà lần

Sáng Béo viết 18:34 ngày 30/09/2018

thế này nhé. lần này ko liên qua đến code chút. bạn thử xem bên toán thì khi tịnh tiến theo hướng nào đó 1 đoạn bằng bao nhiêu đó thì tọa độ x, y thay đổi ra sao. sau đó hãy áp dụng vào code.

Độc Cô Kiếm Ma viết 18:40 ngày 30/09/2018

cái ý tưởng thì e biết, vấn đề là không biết hàm với thuật toán thôi
có thể cho em xin hàm di chuyển 1 đường thẳng không ạ

Gió viết 18:44 ngày 30/09/2018

Minh xet trong Oxy khi tịnh tiến 1 đường thẳng thì vector pháp tuyến không thay đổi.
giả sử đường thẳng có pt: ax+by+c=0 và vector tịnh tiến là (u,v)
giả sử b#0: đường thẳng đi qua A(0;-c/b). Qua phép tịnh tiến dc ảnh A’ (u,v-c/b)
=> pt đường thẳng sau phép tịnh tiến:
a(x-u) + b(y-v+c/b) = 0
<=> ax + by + c -au-bv = 0 là pt đường thẳng sau phép tịnh tiến qua vector (u,v)

  • nếu bạn lưu thông tin đường thẳng qua hệ số a,b,c:
    function tinhtien( {a,b,c} , { u,v} )
    return {a,b,c-au-bv}
    end
  • nếu lưu dt qua 2 điểm:
    function tinhtien ( { {a1,b1} , {a2,b2}}, {u,v})
    return {{a1+u,b1+v}, {a2+u,b2+v}}
    end
    P/s: ngoặc này {} tượng trưng cho struct lưu thông tin đường thẳng hoặc vector
Sáng Béo viết 18:34 ngày 30/09/2018

không ổn lắm. sao ko có trường hợp tịnh tiến theo phương nào đó 1 đoạn bằng bao nhiêu đó nhỉ

Độc Cô Kiếm Ma viết 18:33 ngày 30/09/2018

ví dụ mình vẽ 1 đoạn thẳng bằng DDA với code:

#include <graphics.h>
#define Round(a) (int)(a+0.5)   // lam tron so
#define DELAY 10
int color = RED;
 
void lineDDA(int x1, int y1, int x2, int y2){       // thuat toan DDA
    int x_unit = 1, Dx = x2 - x1, Dy = y2 - y1;     // Khoi tao cac gia tri ban dau
    int x = x1;
    float y = y1;
    float m = (float)Dy/Dx;     // he so goc m
    putpixel(x, Round(y), color);
     
    while(x < x2){
        delay(10);  // thoi gian tre khi ve 1 diem anh
        x += x_unit;
        y += m;
        putpixel(x,Round(y), color);
    }
  
 
      }

int main(){
    int gd=DETECT, gm;
    initgraph(&gd,&gm,"c:tcbgi");        // khoi tao cua so do hoa
    setbkcolor(WHITE);
    lineDDA(50,150, 300, 200);      // ve duong thang

    getchar();
    return 0;
}

thì mình dùng hàm gì để di chuyển đoạn thẳng này 1 vectơ tịnh tiến?

Sáng Béo viết 18:41 ngày 30/09/2018

sửa lại code đi bạn ơi, dùng Markdown ấy

Độc Cô Kiếm Ma viết 18:39 ngày 30/09/2018

là sao bác, tóm lại là bác có hàm tịnh tiến thì cho e xin cái

Bài liên quan
0