Phương trình cho đồ thị nảy?


7

Tôi về cơ bản muốn máy ảnh của tôi di chuyển 3D tự động. Hiện tại, tôi có chuyển động tuyến tính khá ngu ngốc, vì vậy tôi muốn thực hiện một chuyển động nảy.

Tuy nhiên, một phương trình tốt để nảy là gì? Ý tôi là, đối với một vòng tròn bạn có thể làm y = sqrt(1 - x^2), nhưng nếu tôi có một đồ thị nảy, công thức tương ứng sẽ là gì? Tôi đoán đó là một cái gì đó với absnó phải 'nảy'. Một cái gì đó giống như (tôi đã tạo ra điều này với Paint): đồ thị nảy

Một phương trình tốt dẫn đến một biểu đồ như vậy là gì? Các phép biến đổi tôi có thể tự làm, tôi đoán, nhưng tôi chỉ tìm loại phương trình.


3
Có lẽ bạn có thể sử dụng một cái gì đó dọc theo dòng: y = abs (cos (x * 5) * max (1-x, 0))
Kromster

6
Sử dụng một phương trình đồ họa sẽ không giúp bạn áp dụng các gia tốc tìm kiếm tự nhiên cho hệ thống. Bạn có thể ngạc nhiên khi thấy việc sử dụng các phương trình Newton cơ bản ở đây sẽ dễ dàng như thế nào. Cung cấp cho vật một khối lượng và động lượng nhỏ và để cho lực hấp dẫn và Newton xử lý các gia tốc & thay đổi vị trí. Nó dễ dàng hơn nhiều so với bạn nghĩ.
Steve H

1
@SteveH Bạn nên đặt cái này để trả lời.
Notabene

@notabene yeah, tôi đang ngồi trên hàng rào với điều đó và bạn đã đẩy tôi sang bên đó. Cảm ơn. Tôi đã do dự vì tôi không muốn dành 15 phút để cung cấp giải pháp mã giả.
Steve H

@Krom: Cảm ơn, tôi hiện có : y = abs(cos((x+18)/6.2)/((x+18)/6.2))*149. @SteveH: Bạn có thể nói các thuật ngữ chính trong các giải pháp của Newton không? Tôi dường như đang sử dụng những cái sai vì tôi thực sự không thể tìm thấy một ví dụ tốt về cách thực hiện nó.
pimvdb

Câu trả lời:


8

Sử dụng một phương trình đồ họa sẽ không giúp bạn áp dụng các gia tốc tìm kiếm tự nhiên cho hệ thống. Bạn có thể ngạc nhiên khi thấy việc sử dụng các phương trình Newton cơ bản ở đây sẽ dễ dàng như thế nào. Cung cấp cho vật một khối lượng và động lượng nhỏ và để cho lực hấp dẫn và Newton xử lý các gia tốc & thay đổi vị trí. Nó dễ dàng hơn nhiều so với bạn nghĩ


Ví dụ về phương trình đã nói trong câu trả lời của bạn sẽ rất tuyệt :)
Kromster


2
đây là ví dụ: xna.multigan.com/pastebin/?page=view&id=1301401080 Tôi đã viết nó bằng XNA nhưng tôi nghĩ nó cũng có thể được đọc dưới dạng mã giả
Steve H

Cảm ơn rất nhiều! Bạn chắc chắn xứng đáng với câu trả lời là người được chấp nhận :)
pimvdb

1
Đây là những gì tôi đã kết thúc với (JavaScript): jsfiddle.net/Cf9H4 .
pimvdb

4

Thay vì cung cấp một câu trả lời trực tiếp, tôi muốn chỉ cho bạn đi đúng hướng. Nếu bạn google cho AI để di chuyển các thực thể, bạn sẽ tìm thấy các thuật toán bằng cách sử dụng các biến như tốc độ, khối lượng, vận tốc và tích lũy. Nếu bạn thêm lực hấp dẫn vào phương trình, bạn sẽ có hành vi thực tế.

Như đã nêu trong một trong những ý kiến ​​cho câu hỏi của bạn, nó không quá phức tạp.

Tôi khuyên bạn nên lập trình trò chơi AI bằng ví dụ mà tôi thấy rất hữu ích.

Tôi cũng tìm thấy liên kết này giải thích các lực liên quan đến một quả bóng nảy.


2

Nếu chuyển động của bạn trông rất giống biểu đồ của bạn, bạn có thể sử dụng phương trình nới lỏng như thế này ( nguồn ):

// BOUNCE EASING: exponentially decaying parabolic bounce
easeOutBounce = function (t, b, c, d) {
    if ((t/=d) < (1/2.75)) {
        return c*(7.5625*t*t) + b;
    } else if (t < (2/2.75)) {
        return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
    } else if (t < (2.5/2.75)) {
        return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
    } else {
        return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
    }
};

easeInBounce = function (t, b, c, d) {
    return c - Math.easeOutBounce (d-t, 0, c, d) + b;
};

Chuyển động sẽ nhìn trong biểu đồ này (easyIn): nảy dễ dàng trong


Tôi phải nói rằng điều này chỉ hoạt động tuyệt vời. Rõ ràng, nó không chỉ là một biểu đồ mà là sự kết hợp của x^2các biến thể. Nếu tôi sử dụng, easeOutBounce(50, 0, 50, 50)tôi nhận được hiệu ứng nảy với 50 bước, trong phạm vi 0 - 50. Cảm ơn!
pimvdb

1

Nếu bạn muốn nảy thì hãy nhìn vào Hệ số bồi thường . Đó là một giá trị từ 0 đến 1 đại diện cho "độ nảy" của máy ảnh. Giá trị 0 có nghĩa là sẽ không xảy ra hiện tượng nảy khi vật va chạm với mặt đất và 1 có nghĩa là máy ảnh sẽ bật ngược trở lại chiều cao ban đầu của nó sau khi nó va chạm với mặt đất (dù sao trong kịch bản này).

Cách dễ nhất để thực hiện nó là cung cấp cho máy ảnh của bạn một vectơ vận tốc ban đầu (gọi nó là u) và bạn muốn tìm vectơ vận tốc cuối cùng sau khi máy ảnh va chạm (hãy gọi v này). Hãy gọi CoR e.

e = v / u

Vì vậy, tất cả những gì bạn cần làm là nhân vận tốc ban đầu của bạn với hệ số, phủ định vận tốc này (để nó đi ngược chiều) và voila, bạn có vận tốc cuối cùng và nếu bạn tiếp tục làm điều này cho mỗi lần nó va chạm, bạn có chuyển động nảy của bạn. Điều này giả sử bạn có một mặt phẳng mà bạn muốn chống lại, nếu bạn có một lưới phức tạp mà bạn đang va chạm, thì thay vì phủ định vectơ, chỉ cần nhân nó với đa giác bình thường mà bạn va chạm (về cơ bản là những gì phủ định làm trên một mặt phẳng).

Sử dụng một số loại chức năng cập nhật vị trí (Euler, Verlet hoặc thậm chí RK4 - xem liên kết này ) và nó sẽ làm cho công việc này dễ dàng hơn rất nhiều.

Hy vọng rằng sẽ giúp (và tôi hy vọng toán học của tôi không quá xa: P)


1

Nếu bạn đang tìm kiếm một phương trình chặt chẽ nhưng mô tả đại khái về độ nảy, bạn có thể thử:

y=(e^-x)*abs(4cos(5x))

Ở đâu

  • "4" là hệ số cho chiều cao của giọt và các lần nảy tiếp theo,
  • "5" là tần số của các lần thoát và
  • phần "abs" là để tạo ra một quỹ đạo sắc nét cho phần dưới của độ nảy.

Đẹp. Tại sao điều này không được nâng cao hơn?
JohannesA
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.