ฉันต้องการย้ายวัตถุหนึ่งจุด (จุด) ในเส้นทางวงกลม ฉันจะเปลี่ยนพิกัด X และ Y เป็นอย่างไร
ฉันต้องการย้ายวัตถุหนึ่งจุด (จุด) ในเส้นทางวงกลม ฉันจะเปลี่ยนพิกัด X และ Y เป็นอย่างไร
คำตอบ:
คุณสามารถทำได้โดยใช้คณิตศาสตร์อย่างง่าย:
X := originX + cos(angle)*radius;
Y := originY + sin(angle)*radius;
(originX, originY)เป็นศูนย์กลางของแวดวงของคุณ รัศมีคือรัศมี แค่นั้นแหละ.
นี้ทำงานได้เพราะไซน์และโคไซน์มีความสัมพันธ์ทางคณิตศาสตร์ในแวดวงหน่วย
เครดิตภาพ: LucasVB (ทำงานเอง) [สาธารณสมบัติ] ผ่านวิกิพีเดีย (ลดขนาดลงเหลือ 70%)
คุณสามารถใช้สมการพารามิเตอร์ตามที่ระบุไว้โดย Krom เพื่อให้เข้าใจว่าทำไมเราจึงใช้สูตรนี้คุณต้องเข้าใจว่าสมการคืออะไร สมการนี้ได้มาจากสมการตัวแปรของวงกลม
การพิจารณาวงกลมถูกวาดด้วยจุดศูนย์กลางบนจุดกำเนิด (O) ดังที่แสดงในแผนภาพด้านล่าง
หากเราหาจุด "p" บนเส้นรอบวงของวงกลมจะมีรัศมี r
ให้มุมที่ทำโดย OP (ต้นกำเนิดถึง p) เป็น be ให้ระยะห่างของ p จากแกน x เป็น y ปล่อยให้ระยะทาง p จากแกน y เป็น x
จากการใช้ข้อสมมติข้างต้นเราจะได้สามเหลี่ยมที่แสดงด้านล่าง:
ตอนนี้เรารู้แล้วว่าcos θ = ฐาน / ด้านตรงข้ามมุมฉากและบาปθ = ตั้งฉาก / ด้านตรงข้ามมุมฉาก
ซึ่งให้เราcos θ = x / rและsin θ = y / r
:: x = r * cos θและ y = r * sin θ
แต่ถ้าวงกลมไม่ได้อยู่ที่จุดกำเนิดและค่อนข้างที่ (a, b) เราสามารถพูดได้ว่าศูนย์กลางของวงกลมนั้นเปลี่ยนไป
หน่วยในแกน x
ขหน่วยในแกน y
ดังนั้นสำหรับวงดังกล่าวเราสามารถเปลี่ยนสมการพารามิเตอร์ตามด้วยการเพิ่มการเลื่อนบนแกน x และ y ทำให้เรามีสมการต่อไปนี้:
x = a + (r * cos θ)
y = b + (r * sin θ)
โดยที่ & b คือ x, y พิกัดของศูนย์กลางของวงกลม
ดังนั้นเราจึงพบ x และ y พิกัดของจุดบนเส้นรอบวงของวงกลมด้วยรัศมี r
มีอีกกลลวงที่คุณใช้สูตร sin (x + a) และ cos (x + a) และนั่นทำให้คุณสามารถคำนวณ sin (a) และ cos (a) - มุมที่คุณต้องการเคลื่อนไหว จากตำแหน่งปัจจุบันของคุณ - เพียงครั้งเดียวและทำการคูณและเพิ่มเติมในแต่ละขั้นตอน
sin (x + a) = sin (x) * cos (a) + cos (x) * sin (a), iirc
แน่นอนว่าจะถือว่าความเร็วเชิงมุมคงที่
ระวังความแม่นยำทางคณิตศาสตร์ที่ จำกัด ฉันได้สังเกตเห็นการเคลื่อนไหวในลักษณะ "วงกลม" ที่ผ่านมานำมาใช้ในลักษณะนั้นซึ่งจะทำให้เกิดการหมุนวนซึ่งเป็นผลมาจากการปัดซ้ำเป็นครั้งคราวเมื่อเวลาผ่านไป อาจจำเป็นต้องรีเซ็ตตำแหน่งเป็น (x0, y0) หลังจากการปฏิวัติแต่ละครั้ง