俄罗斯方块旋转算法 Baeldung中文网 > 자유게시판

본문 바로가기

[전문점] 俄罗斯方块旋转算法 Baeldung中文网

profile_image
Cesar
23시간 48분전 92 0

본문

俄罗斯色情 - https://www.blackcurve.com/casino-non-gamstop/reviews/monixbet/.

俄罗斯方块旋转算法 Baeldung中文网


1. Overview


In this tutorial, we’ll discuss the algorithm behind rotating Tetris pieces. We’ll start by discussing the equation for rotating a shape in general. Then, we’ll define that can be used to manipulate the Tetris pieces’ rotations.


Finally, we’ll present the algorithm to rotate a Tetris piece and finish with a quick conclusion.


2. Rotating a Shape


First, let’s define the problem from a logical and mathematical point of view. Then, we can extract the general equations to rotate a point in the cartesian coordinate system.


The Tetris game consists of the following 7 main shapes:


Drawing4-1-1024x257.png


Each shape can be rotated and then put on top of others to form straight lines. The allowed rotations for each piece are 90, 180, 270, and 360 degrees, which is the original orientation of the shape. This tutorial discusses the general algorithm to rotate any of the mentioned pieces.


The algorithm should rotate a given Tetris piece by 90 degrees. Calling the algorithm multiple times will generate all the possible rotations for the given piece. As a start, let’s discuss the general rotation equations and then see how to apply them in the intended algorithm.


Since each Tetris piece is a polygon, rotating each of the polygon’s corners alone should give us the resulting rotated piece. Therefore, in this section, we’ll discuss the equations to rotate a point around the origin of the cartesian coordinate axis.


Let’s take a look at the following figure:


Drawing2-1024x825.png


In the coordinates above, we have point quicklatex.com-b6856ac0ab0200ef2ba6287c85773661_l3.svg forming an angle quicklatex.com-5f44d9bbc8046069be4aa2989bff19aa_l3.svg with the x-axis. For simplicity, we’ll consider the point as a vector with magnitude quicklatex.com-01bcf7e9e043561da78fecf715c8a46e_l3.svg. Using this representation, we can define equations for quicklatex.com-7e5fbfa0bbbd9f3051cd156a0f1b5e31_l3.svg and quicklatex.com-38461fc041e953482219abf5d4cce1cb_l3.svg as follows:


    quicklatex.com-5db8fd594df578c9c768b6d2c03db5ef_l3.svg


    quicklatex.com-4a878e5b1659c780ebc19f1ce1c073ab_l3.svg


After defining the equations to represent a point in the coordinate axis, let’s rotate the point quicklatex.com-b6856ac0ab0200ef2ba6287c85773661_l3.svg to new coordinates quicklatex.com-59f11e327864bfd0dfb602e430e5bdf0_l3.svg. The rotation is shown in the following shape:


Drawing1-1024x825.png


The original point was rotated by quicklatex.com-0f39b655b53423e80558c68b8c2ae1c3_l3.svg degrees to the new coordinates quicklatex.com-59f11e327864bfd0dfb602e430e5bdf0_l3.svg having a new magnitude of quicklatex.com-ebee390253a45105959c2bc4c4ad9d27_l3.svg. We can see that the new point forms an angle quicklatex.com-b7847fbf11b2aa11799e33624950ca23_l3.svg with the x-axis. Likewise, we can define equations for quicklatex.com-59f11e327864bfd0dfb602e430e5bdf0_l3.svg as follows:


    quicklatex.com-17e19de9822aa541042581683ce850e9_l3.svg


    quicklatex.com-f419abceb484246c1d72f1517e3e2b4a_l3.svg


To find the rotation equations, we need to find quicklatex.com-7e9240d4beef863c91299bf5edf7a375_l3.svg and quicklatex.com-64a0a8e8f9cf320aa10cf6e5c9f0499c_l3.svg as functions to the original coordinates quicklatex.com-2234c4dc1f3099131d36c7e7f02b1d84_l3.svg and quicklatex.com-4149db711c9e681cd65bbdb5264c4234_l3.svg. To do this, we’ll use the following known equations of quicklatex.com-f9be6c4b03749d6dff440419db4cfa18_l3.svg and quicklatex.com-d3762ae196ab67f79666c057ed48cd79_l3.svg for the sum of two angles:


    quicklatex.com-89a753a6da38fbbd2305d29c3da03fcd_l3.svg


    quicklatex.com-c2fa76ce228dfda73d160505d976252b_l3.svg


Additionally, rotating a vector doesn’t change its magnitude. Therefore, the following equation applies:


    quicklatex.com-9ca1d85754543ceb277253df80847117_l3.svg


Now, we can use the above equations to rewrite our formula for quicklatex.com-b4a147f08046ded14d94e9286029b2a7_l3.svg and quicklatex.com-e3860fc68d5fca7cb5a4fdd0e4d3410d_l3.svg:


    quicklatex.com-46b968e7c6df26ccf1897638638f1308_l3.svg


    quicklatex.com-656347a9fb7b527d62491a62afa491bc_l3.svg


We can simplify them using the equations we defined in section 2.2 to the following ones:


    quicklatex.com-4d7ebddbf7165f776e7f1f533c2320bb_l3.svg


    quicklatex.com-78a9edd83e9a4718937dbfb61865d722_l3.svg


Now, we can use these equations to create an algorithm that can rotate a Tetris piece. Let’s start by defining the data structure to store the pieces.


3. Structure Definition


We need to define the structure that will store the Tetris pieces. To do that, we can define each shape as a set of points which are the corners of the shape. In addition, the structure must support rotating the Tetris pieces.


It’s worth noting that Tetris pieces are rotated around their origin. Therefore, we need to define the center point for each shape as well. Take a look at the following figure that shows the different rotations of each shape along with its origin:


Drawing3-1-1024x666.png


Therefore, for each shape, we’ll have an array quicklatex.com-639d86127b094ce8bbe81128a8e04c3a_l3.svg containing the shape’s corner points and a variable quicklatex.com-d450e5d51eb316725457ede5e86e5bb9_l3.svg containing the shape’s origin. Now that we defined the structure, we can move into implementing the rotation algorithm.


4. Algorithm


To implement a rotation algorithm, we only need one function called quicklatex.com-8f1b273ba5e45c0a34affba1531d83ca_l3.svg, which rotates the given shape by the given angle. Note that the piece is not initially located at the coordinated axis’s center. Therefore, the algorithm must shift the shape to the center of the coordinate axis, perform the rotations, and then shift the point back.


Let’s take a look at the algorithm:


The function takes the array of points, the origin of the shape, and the rotation angle quicklatex.com-349fdc9f5f41a6ecbf5e500a90fb7a73_l3.svg as input. We start by defining quicklatex.com-2795d6cdf89a6089128d4299f7974a6b_l3.svg, which will hold the resulting rotated points. Note that the origin stays the same after the rotation, so we don’t need to return it.


Next, we iterate over all the points of the shape. We need to shift each point as if the shape’s origin is moved to the centre of the coordinate axis. If the origin is moved to the centre, then it shifts to point quicklatex.com-e6f462232b138f5ab691a1230c3f31e1_l3.svg. At this time, the point will also shift with the same amount. Therefore, we shift the point by quicklatex.com-0ac9845abea641290db727c478b2177d_l3.svg. As a result, we define quicklatex.com-e6e1c3611728e9db0e52bb6485e06068_l3.svg and quicklatex.com-2b1ce6fe7664ef728c0428024c69737b_l3.svg, which are the shifted coordinates.


Then, we perform the rotation by defining quicklatex.com-606a5fa3feb8ab19bd3c2da653ad7952_l3.svg and quicklatex.com-4e8d5da324a650dffbf976bdfeb7d006_l3.svg which are the coordinates for the rotated point, by applying the equations from section 2. After that, we shift the new points quicklatex.com-606a5fa3feb8ab19bd3c2da653ad7952_l3.svg and quicklatex.com-4e8d5da324a650dffbf976bdfeb7d006_l3.svg back away from the centre of the coordinate axis. Finally, we add the new points to the list of rotated points we created.

cHJpdmF0ZS9sci9pbWFnZXMvd2Vic2l0ZS8yMDI2LTA2LzU1MzQzNTc4MzA4XzBlYjk5YzZkZjVfby1tcXl2NTVnbC5qcGc.jpg

In the end, we return the resulting quicklatex.com-2795d6cdf89a6089128d4299f7974a6b_l3.svg as the new shape corder points after performing the rotation.


5. Conclusion


In this article, we discussed the algorithm for rotating Tetris pieces. We started by discussing the rotation problem in general and then moved to define the structure that stores the Tetris pieces and the algorithm for rotating them.

댓글목록0

등록된 댓글이 없습니다.

댓글쓰기 댓글 포인트 안내

적용하기
자동등록방지 숫자를 순서대로 입력하세요.
상담신청