2010-12-16 20 views
5

Jak uzyskać 4 punkty obrócone o pewne stopnie wokół wskaźnika, aby utworzyć prostokąt? Mogę obrócić punkt wokół punktu, ale nie mogę go zrównoważyć, aby utworzyć prostokąt, który nie jest zniekształcony.Obracanie prostokąta wokół punktu

+2

próbowałeś zrobić to tak daleko? jakiś kod? dzięki – Trufa

+3

Przetłumacz swoje cztery punkty, tak aby traktować wskaźnik jako środek, wykonaj obrót za pomocą standardowej metody macierzy obrotu, a następnie przetłumacz punkty ponownie. [Wyjaśnienie tutaj] (http://www.euclideanspace.com/maths/geometry/affine/aroundPoint/index.htm) – Michal

+0

Gdybym zrozumiał, że go użyję, ale potrzebuję rozwiązania w prostym języku angielskim lub najlepiej w JavaScript. – Anonymous

Odpowiedz

23

Jeśli możesz obrócić punkt wokół punktu, obracanie prostokąta powinno być proste - wystarczy obrócić 4 punkty.

Oto funkcja js obrócić punkt wokół pochodzenia:

function rotate_point(pointX, pointY, originX, originY, angle) { 
    angle = angle * Math.PI/180.0; 
    return { 
     x: Math.cos(angle) * (pointX-originX) - Math.sin(angle) * (pointY-originY) + originX, 
     y: Math.sin(angle) * (pointX-originX) + Math.cos(angle) * (pointY-originY) + originY 
    }; 
} 

a następnie można to zrobić do każdego punktu. Oto przykład: http://jsfiddle.net/dahousecat/4TtvU/

zmienić kąt i uderzył run, aby zobaczyć wynik ...

+0

Czy możesz to wyjaśnić? jsfiddle.net/bjhc34xk/7 Czy ma to coś wspólnego z przybliżeniem PI, czy może błędami matematycznymi zmiennoprzecinkowych? –

+1

Rozwidlone skrzypce Felixa, zawierające suwak do wprowadzania dynamicznego, aby ułatwić eksperymentowanie - https://jsfiddle.net/brichins/0ccdd362/ – brichins

+2

@MaxMastalerz Jestem pewien, że przestawiłeś się z tego już teraz, ale twój Fiddle jest prawdopodobnie nie robić tego, co myślisz. Zmieniasz współrzędną X swojego punktu końcowego, w środku obliczeń, a następnie obracasz współrzędną Y od punktu przesunięcia zamiast środka. Wyniki w chłodnej złotej spirali, ale myślę, że chciałeś to zrobić: https://jsfiddle.net/brichins/w2rxsbt4/ – brichins