Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Làm sao để cho tròng mắt di chuyển theo chuột

  1. #1
    Ngày gia nhập
    02 2010
    Bài viết
    73

    Mặc định Làm sao để cho tròng mắt di chuyển theo chuột

    Em có 1 mắt và 1 mặt:

    em muốn khi em di chuyển chuột thì con mắt nhìn theo con chuột như ví dụ

    Em ngồi nghĩ mãi mà không ra cách làm, ai giúp em với
    Attached Thumbnails Attached Thumbnails eye.png   skin.png  

  2. #2
    Ngày gia nhập
    08 2011
    Nơi ở
    Yên Bái- Hà Nội
    Bài viết
    961

    A cũng chưa làm cái đó bjo. Nhưng theo anh thì có thể dựa vào cái vị trí của chuột và con mắt. Giả sử vị trí con mắt là M1(Xm,Ym), của chuột là M2 (Xc,Yc). Khi đó tròng con mắt mà e muốn sẽ luôn nằm trên đoạn thẳng nối 2 điểm M1M2. Do vậy, muốn vẽ cái chòng mắt thì cần phải xác định giao điểm của đoạn thẳng M1M2 với quỹ đạo của Tròng mắt. E thử xem ổn ko.
    Skype: mrfour.it - Yahoo:mrfour_it
    Gmail: mrfour.it@gmail.com
    Bạn muốn học lập trình? Bạn chưa có kiến thức cơ bản? Bạn muốn học từ cơ bản tới nâng cao?... Bạn muốn có source code để tham khảo? Muốn có người hỗ trợ khi học?....http://www.laptrinh123.com sẽ giúp bạn những điều đó!

  3. #3
    Ngày gia nhập
    02 2010
    Bài viết
    73

    Trích dẫn Nguyên bản được gửi bởi mrfour.it Xem bài viết
    A cũng chưa làm cái đó bjo. Nhưng theo anh thì có thể dựa vào cái vị trí của chuột và con mắt. Giả sử vị trí con mắt là M1(Xm,Ym), của chuột là M2 (Xc,Yc). Khi đó tròng con mắt mà e muốn sẽ luôn nằm trên đoạn thẳng nối 2 điểm M1M2. Do vậy, muốn vẽ cái chòng mắt thì cần phải xác định giao điểm của đoạn thẳng M1M2 với quỹ đạo của Tròng mắt. E thử xem ổn ko.
    Thuật toán trên em cũng từng nghĩ rồi, cái giao điểm anh nói em nghĩ là tâm của cái hình vuông tròng mắt thì hay hơn, sau đó ta sẽ xác định góc trên trái của sprite này( vì khi hình vẽ ra nó sẽ vẽ bắt đầu từ điểm góc trên trái, nếu ta dùng điểm anh nói để vẽ, con mắt sẽ nhìn chệch xuống dưới con chuột không hợp lắm)
    Còn cái tâm hình tròn và bán kính mà anh nói ta phải tự xác định.
    Có điều kiến thức toàn thì em quên hết rồi nên em không làm được
    ----------------------------------------
    Cảm ơn anh gợi ý, em sẽ thử viết code
    ----------------------------------------
    Em thử viết nhưng mà code chạy không theo ý muốn, em viết giống như thuật toán anh gợi ý:

    Visual C# Code:
    1.     Point FindPoint(Point _pMouse, Point _pMiddleCircle, int _iR)
    2.         {
    3.             Point _pMiddleEye = new Point(0,0);
    4.  
    5.             double _dK =(_pMiddleCircle.X - _pMouse.X) / (_pMiddleCircle.Y - _pMouse.Y);
    6.  
    7.             double _dTemp = Math.Pow(_dK, 2) + 1;
    8.  
    9.             _dTemp = (_iR * _iR) / _dTemp;
    10.  
    11.             _dTemp = Math.Sqrt(_dTemp);
    12.  
    13.             _pMiddleEye.X = (int)_dTemp + _pMiddleCircle.X;
    14.             _pMiddleEye.Y = (_pMiddleEye.X - _pMiddleCircle.X) * (int)_dK + _pMiddleCircle.Y;
    15.  
    16.             return _pMiddleEye;
    17.         }

    Con mắt nó không chạy vòng tròn khi chuột chạy vòng tròn và khi con chuột nằm ngang tâm vòng tròn thì _pMiddleCircle.Y - _pMouse.Y = 0 nên báo lỗi
    Đã được chỉnh sửa lần cuối bởi tamthientai : 12-10-2011 lúc 01:07 AM.

  4. #4
    Ngày gia nhập
    08 2011
    Nơi ở
    Yên Bái- Hà Nội
    Bài viết
    961

    Trích dẫn Nguyên bản được gửi bởi tamthientai Xem bài viết
    Thuật toán trên em cũng từng nghĩ rồi, cái giao điểm anh nói em nghĩ là tâm của cái hình vuông tròng mắt thì hay hơn, sau đó ta sẽ xác định góc trên trái của sprite này( vì khi hình vẽ ra nó sẽ vẽ bắt đầu từ điểm góc trên trái, nếu ta dùng điểm anh nói để vẽ, con mắt sẽ nhìn chệch xuống dưới con chuột không hợp lắm)
    Còn cái tâm hình tròn và bán kính mà anh nói ta phải tự xác định.
    Có điều kiến thức toàn thì em quên hết rồi nên em không làm được
    ----------------------------------------
    Cảm ơn anh gợi ý, em sẽ thử viết code
    ----------------------------------------
    Em thử viết nhưng mà code chạy không theo ý muốn, em viết giống như thuật toán anh gợi ý:

    Visual C# Code:
    1.     Point FindPoint(Point _pMouse, Point _pMiddleCircle, int _iR)
    2.         {
    3.             Point _pMiddleEye = new Point(0,0);
    4.  
    5.             double _dK =(_pMiddleCircle.X - _pMouse.X) / (_pMiddleCircle.Y - _pMouse.Y);
    6.  
    7.             double _dTemp = Math.Pow(_dK, 2) + 1;
    8.  
    9.             _dTemp = (_iR * _iR) / _dTemp;
    10.  
    11.             _dTemp = Math.Sqrt(_dTemp);
    12.  
    13.             _pMiddleEye.X = (int)_dTemp + _pMiddleCircle.X;
    14.             _pMiddleEye.Y = (_pMiddleEye.X - _pMiddleCircle.X) * (int)_dK + _pMiddleCircle.Y;
    15.  
    16.             return _pMiddleEye;
    17.         }

    Con mắt nó không chạy vòng tròn khi chuột chạy vòng tròn và khi con chuột nằm ngang tâm vòng tròn thì _pMiddleCircle.Y - _pMouse.Y = 0 nên báo lỗi
    Trước hết về cái lỗi: =0. E chỉ cần kiểm tra xem MouseY và MiddleCircleY có bằng nhau ko? nếu bằng nhau thì có 2 trường hợp:
    1. Mouse ở phí trên=>lấy điểm tròng mắt ở phía trên
    2. mouse ở phía dưới =>lấy điểm tròng mắt theo phía dưới.
    Khi nó ko thẳng đứng thì mới làm cái công thức kia=>hết lỗi/0 nhé.

    Về vị trí của cái tròng mắt không theo trên quỹ đạo như ý muốn. Nguyên nhân nằm trong cái e đã nói rồi. Bởi vì, đồ họa ở C# khác với Pascal/C ở phần vẽ đường tròn/ellipse. Nó không vẽ theo tâm và bán kính, mà vẽ theo điểm bắt đầu (góc trên bên trái) sau đó vẽ sang phải và xuống dưới. Do đó, e phải tính toán và xử lý. Cái nè dùng hình học chắc là ổn. hihi
    Skype: mrfour.it - Yahoo:mrfour_it
    Gmail: mrfour.it@gmail.com
    Bạn muốn học lập trình? Bạn chưa có kiến thức cơ bản? Bạn muốn học từ cơ bản tới nâng cao?... Bạn muốn có source code để tham khảo? Muốn có người hỗ trợ khi học?....http://www.laptrinh123.com sẽ giúp bạn những điều đó!

  5. #5
    Ngày gia nhập
    02 2010
    Bài viết
    73

    Trích dẫn Nguyên bản được gửi bởi mrfour.it Xem bài viết
    Trước hết về cái lỗi: =0. E chỉ cần kiểm tra xem MouseY và MiddleCircleY có bằng nhau ko? nếu bằng nhau thì có 2 trường hợp:
    1. Mouse ở phí trên=>lấy điểm tròng mắt ở phía trên
    2. mouse ở phía dưới =>lấy điểm tròng mắt theo phía dưới.
    Khi nó ko thẳng đứng thì mới làm cái công thức kia=>hết lỗi/0 nhé.

    Về vị trí của cái tròng mắt không theo trên quỹ đạo như ý muốn. Nguyên nhân nằm trong cái e đã nói rồi. Bởi vì, đồ họa ở C# khác với Pascal/C ở phần vẽ đường tròn/ellipse. Nó không vẽ theo tâm và bán kính, mà vẽ theo điểm bắt đầu (góc trên bên trái) sau đó vẽ sang phải và xuống dưới. Do đó, e phải tính toán và xử lý. Cái nè dùng hình học chắc là ổn. hihi
    Visual C# Code:
    1.         Point FindPoint(Point _pMouse, Point _pMiddleCircle, int _iR)
    2.         {
    3.             Point _pMiddleSprite = new Point(0,0);
    4.  
    5.             if (_pMiddleCircle.X == _pMouse.X)
    6.                 _pMiddleSprite.X = _pMouse.X;
    7.             else
    8.             {
    9.                 double _dK =(_pMiddleCircle.Y - _pMouse.Y) / (_pMiddleCircle.X - _pMouse.X);
    10.  
    11.                 double _dTemp = Math.Pow(_dK, 2) + 1;
    12.  
    13.                 _dTemp = (_iR * _iR) / _dTemp;
    14.  
    15.                 if (_pMouse.X < _pMiddleCircle.X)
    16.                     _dTemp = -Math.Abs(Math.Sqrt(_dTemp));
    17.                 else
    18.                     _dTemp = Math.Abs(Math.Sqrt(_dTemp));
    19.  
    20.                
    21.  
    22.                 _pMiddleSprite.X = (int)_dTemp + _pMiddleCircle.X;
    23.             }
    24.  
    25.             if (_pMouse.X == _pMiddleCircle.X)
    26.             {
    27.  
    28.                 if (_pMouse.Y > _pMiddleCircle.Y)
    29.                     _pMiddleSprite.Y = (int)Math.Abs(Math.Sqrt(_iR * _iR));
    30.                 else
    31.                     _pMiddleSprite.Y = -(int)Math.Abs(Math.Sqrt(_iR * _iR));
    32.  
    33.                 _pMiddleSprite.Y = _pMiddleSprite.Y + _pMiddleCircle.Y;
    34.             }
    35.             else
    36.             {
    37.                 double _dTemp = (_iR * _iR)- Math.Pow(_pMiddleSprite.X- _pMiddleCircle.X, 2);
    38.  
    39.                 if (_pMouse.Y > _pMiddleCircle.Y)
    40.                     _dTemp = Math.Abs(Math.Sqrt(_dTemp));
    41.                 else
    42.                     _dTemp = -Math.Abs(Math.Sqrt(_dTemp));
    43.  
    44.                 _pMiddleSprite.Y = (int)_dTemp + _pMiddleCircle.Y;
    45.             }
    46.  
    47.             return _pMiddleSprite;
    48.         }
    Okie đã xong , cho bạn nào cần
    Cái trên tìm điểm trung tâm của hình, từ đó sẽ tìm được góc trên trái

    Thêm 1 vấn đề nữa anh ạ

    Em có cái tay như vậy
    Khi di chuyển chuột, cái tay cũng di chuyển theo giống con mắt( cũng dùng hàm trên) và cái đầu tròn tròn của cái tay nó hướng theo con chuột, em không biết cách tính góc xoay hình sao cho cái tay được như vậy, anh chỉ giúp nhé
    Quên hết kiến thức về toán rồi anh ạ, đưa về toán thì mường tượng được( bài trên là tìm quỹ tích) nhưng không nhớ cách giải ( mặc dù cấp 3 có làm rồi), mà giờ mò lại toán thì oải quá.
    Attached Thumbnails Attached Thumbnails tay.png  

  6. #6
    Ngày gia nhập
    08 2011
    Nơi ở
    Yên Bái- Hà Nội
    Bài viết
    961

    Mặc định Làm sao để cho tròng mắt di chuyển theo chuột

    eo! Trên mạng thiếu gì lý thuyết về cái đó? e tìm hiểu chút xem thế nào. a Thấy cái trường hợp về bàn tay khác gì cái mắt đâu.
    Skype: mrfour.it - Yahoo:mrfour_it
    Gmail: mrfour.it@gmail.com
    Bạn muốn học lập trình? Bạn chưa có kiến thức cơ bản? Bạn muốn học từ cơ bản tới nâng cao?... Bạn muốn có source code để tham khảo? Muốn có người hỗ trợ khi học?....http://www.laptrinh123.com sẽ giúp bạn những điều đó!

Các đề tài tương tự

  1. Game Cách Di Chuyển Trụ Theo Trỏ Chuột Và Đặt Vào Một Vị Trí
    Gửi bởi NguyenDuyPC trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 28-10-2013, 01:05 PM
  2. Tới Việt Nam với Kính giãn tròng... 3Đ
    Gửi bởi nbm345 trong diễn đàn Giải trí - Thư giãn
    Trả lời: 0
    Bài viết cuối: 22-09-2013, 10:27 AM
  3. Thay đổi icon của chuột khi chuột di chuyển vào vùng dialog
    Gửi bởi kideltn trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 13
    Bài viết cuối: 07-06-2013, 04:34 PM
  4. Kính áp tròng công nghệ cao an toàn BESCON
    Gửi bởi maxilens trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 25-05-2013, 11:46 AM
  5. xem một từ trong chuỗi là một chuỗi con, sắp xếp các chuỗi con theo thứ tự tăng dần
    Gửi bởi qpkdct1101 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 0
    Bài viết cuối: 20-01-2011, 08:22 AM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn