Nhận dạng hình vẽ tay


7

Tôi muốn yêu cầu người chơi sao chép một hình dạng đơn giản (hình tam giác, hình vuông, ngôi sao, bất cứ điều gì có thể được thực hiện trong một nét) bằng chuột hoặc trên màn hình cảm ứng.

Vấn đề định hướng, kích thước không. Thí dụ: nhập mô tả hình ảnh ở đây

Bất cứ ai có thể cho tôi hướng dẫn những kỹ thuật có thể được sử dụng?


Bạn sẽ quét một mảnh giấy có hình vẽ trên đó hay là đầu vào trực tiếp bằng máy tính bảng hay cái gì đó? Bởi vì với đầu vào trực tiếp, bạn có thể tạo các đỉnh nơi người chơi thay đổi hướng và sử dụng các
đỉnh

Nó sẽ là một con chuột (có thể chạm) điều khiển đầu vào.
khách-418

Câu trả lời:


12

Bạn sẽ cần phải nghĩ về các hình dạng ở dạng vector. Vì vậy, đối với tam giác của bạn, hình dạng có thể được biểu diễn dưới dạng chuỗi các vectơ: (-0,5, -0,5), (1, 0), (-0,5, 0,5). bởi vì bạn biết hình dạng và hướng, về cơ bản, bạn đang khớp chuyển động ngón tay của người dùng với hình dạng mong đợi.

Vector đại diện của hình dạng

Cách bạn xác định tỷ lệ của hình ảnh là bằng cách ghi lại điểm chạm ban đầu của người dùng và sau đó, mỗi lần cập nhật, điểm mà ngón tay của họ, cho đến khi họ đạt đến cuối dòng đầu tiên (sẽ nói thêm về điều này sau). Độ dài của vectơ từ nơi chạm bắt đầu đến góc đầu tiên là tỷ lệ của hình ảnh mà bạn đang mong đợi chúng vẽ. bạn nhân đại diện vectơ của bạn về hình dạng dự kiến ​​theo tỷ lệ này để có được hình dạng chính xác mà họ nên vẽ.

Xác định tỷ lệ hình dạng

Để xác định góc đầu tiên, có lẽ bạn nên theo dõi góc của vectơ từ điểm nhấn ban đầu đến vị trí nhấn hiện tại. Khi góc này khác với góc dự kiến ​​theo một ngưỡng nào đó, bạn giả sử người dùng thay đổi hướng vẽ.

Xác định góc đầu tiên

Vì điểm chúng tôi phát hiện sự thay đổi hướng (chữ thập màu xanh lam thấp hơn trên hình ảnh ở trên) không phải là góc thực tế, thay vào đó là nơi góc ngưỡng được giao nhau, chúng tôi vẫn cần xác định điểm thực tế để xác định tỷ lệ chính xác. Cách thức này được thực hiện bằng cách nhìn vào hai vectơ đầu tiên của hình dạng của chúng ta - trong trường hợp của chúng ta (-0,5, -0,5) và (1, 0). Chúng tôi điều chỉnh chúng sao cho cái đầu tiên đi qua vị trí bắt đầu chạm và để cái thứ hai đi qua điểm mà góc ngưỡng được giao nhau. Chúng ta còn lại với (-0,5 + x1, -0,5 + y1) và (1 + x2, 0 + y2), trong đó x1, y1, x2 và y2 là các độ lệch cần thiết để đảm bảo các đường đi qua các điểm đã chỉ định. Sau đó, chúng tôi tìm thấy giao điểm của hai dòng này. Đây là điểm mà giá trị X của cả hai dòng sẽ giống nhau và giá trị Y của cả hai dòng sẽ giống nhau.

Xác định điểm giao nhau đúng

Để tính toán chất lượng bản vẽ, bạn sẽ cần lấy mẫu đường dẫn của người dùng theo các khoảng cách bằng nhau.

nhập mô tả hình ảnh ở đây

Ở mỗi khoảng thời gian, bạn sẽ tìm thấy điểm gần nhất trên hình dạng chính xác. Khoảng cách là lỗi.

nhập mô tả hình ảnh ở đây

Cuối cùng, bạn cũng sẽ cần bình thường hóa lỗi này dựa trên khoảng cách đã vẽ so với khoảng cách chính xác. Điều này là để vẽ một hình dạng dài hơn không làm tăng lỗi của bạn và vì vậy vẽ một hình ngắn hơn không làm giảm nó.

adjusted_error = measured_error * (correct_shape_length / drawn_shape_length)

Nhiều điều tôi đề cập ở đây có cách tiếp cận khác. Tôi cũng có thể đi sâu hơn rất nhiều về đại số tuyến tính cần thiết để thực hiện các phép tính hoặc các lớp và phương thức cụ thể được sử dụng trong chính Unity. Tuy nhiên tôi sẽ cần thêm thông tin về những gì bạn cần giúp đỡ thêm trước khi tôi có thể làm điều đó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.