Chcę zrobić fantazyjną animację, w której punkt przemieszcza się wokół prostokąta. Chcę znaleźć pozycję punktu na raz t
.
Prostokąt jest przez X
, Y
, Width
i Height
.
Czy jest na to algorytm?
Użyłem sin
/ cos
do kręgów. Jakie jest równoważne podejście do prostokątów?
animation
geometry
interpolation
Raildex
źródło
źródło
Odpowiedzi:
Zakładam, że twoje t wynosi od 0 do 1 . (Jeśli nie, pomnóż go, aby odpowiednio skalować.)
Dowiedz się, jaka proporcja ( 0 - 1 ) każdej strony obwodu. ( długość boku / całkowity obwód )
Aby dowiedzieć się, ile z każdej strony jest „wypełnione” w czasie t , iteruj przez strony, odejmując ich proporcje, aż t zostanie wyczerpane do wartości ujemnej. Ta ostatnia krawędź (która spowodowała, że t ma wartość ujemną) jest wypełniona proporcją (długość boku + pozostała część) / długość boku . Reszta nie jest wypełniona.
Aby uzyskać dokładną pozycję wektora w t , pomnóż wektor każdej strony przez proporcję tej strony, która jest wypełniona, i dodaj je.
To działa właściwie na każdym wielokącie!
źródło
Sinus i cosinus t są odpowiednio współrzędnymi y i x punktu na okręgu tworzącym kąt t z osią x. Nie ma takiej potrzeby w prostokącie! Prostokąt składa się z czterech linii. Jeśli
t
idzie od0
celu1
, to osiągnie punkt(px,py)
nat==0
i(qx,qy)
nat==1
z linii podanych przez:jeśli zamiast
0
i1
, czas płynie odt0
dot1
, możesz najpierw znormalizować czas, a następnie zastosować powyższą formułę.Teraz, dla twojego prostokąta, podziel na cztery przypadki,
if
dla każdej krawędzi, która pokrywa jeden z przedziałów czasu i zastosuj ruch linii.Zauważ, że jeśli prostokąt jest wyrównany względem osi, zawsze będzie miała wartość x lub wartość y, która jest stała. Na przykład, dla t pomiędzy
0
ia/4
(a załóżmy (X, Y) to lewy dolny róg),Co równa się również:
źródło
Nie wiem, czy istnieje rzeczywisty algorytm do tego, ale sam go stworzyłem (Java):
Powinieneś przekształcić zmienne
x
iy
, aby uzyskać animację tak dużą lub małą, jak chcesz (mnożąc) i gdzie chcesz (dodając / odejmując od xiy).Nie testowałem tego kodu, ale myślę, że powinien działać. Powinno to również działać dla dowolnego wielokąta z dowolną liczbą punktów (możesz również użyć odrobiny kodu do wygenerowania wielokąta).
źródło
Dany :
Biorąc pod uwagę czas,
T1
jak dostać sięP
na obwodzie (zakładając prostą pozycję na 0,0)?teraz trochę łatwej geometrii i matematyki na scool (mam nadzieję, że mnie oszczędzicie) do zdobycia
P.x
iP.y
oddistT1
źródło