คุณต้องการที่จะใช้รูปไข่A
คำสั่ง RC น่าเสียดายสำหรับคุณคุณต้องระบุพิกัดคาร์ทีเซียน (x, y) ของจุดเริ่มต้นและจุดสิ้นสุดแทนที่จะเป็นพิกัดขั้วโลก (รัศมีมุม) ที่คุณมีดังนั้นคุณต้องทำคณิตศาสตร์บางอย่าง นี่คือฟังก์ชัน JavaScript ซึ่งควรใช้งานได้ (แม้ว่าฉันยังไม่ได้ทดสอบ) และฉันหวังว่าจะอธิบายได้ด้วยตนเอง:
function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
var angleInRadians = angleInDegrees * Math.PI / 180.0;
var x = centerX + radius * Math.cos(angleInRadians);
var y = centerY + radius * Math.sin(angleInRadians);
return [x,y];
}
มุมใดที่สอดคล้องกับตำแหน่งของนาฬิกาที่จะขึ้นอยู่กับระบบพิกัด เพียงสลับและ / หรือคัดค้านเงื่อนไขบาป / cos ตามความจำเป็น
คำสั่ง arc มีพารามิเตอร์เหล่านี้:
rx, ry, x-axis-rotation, large-arc-flag, sweep-flag, x, y
สำหรับตัวอย่างแรกของคุณ:
rx
= ry
= 25 และx-axis-rotation
= 0 เนื่องจากคุณต้องการวงกลมและไม่ใช่วงรี คุณสามารถคำนวณทั้งพิกัดเริ่มต้น (ซึ่งคุณควรM
ove ไป) และพิกัดสิ้นสุด (x, y) โดยใช้ฟังก์ชั่นด้านบนยอม (200, 175) และประมาณ (182.322, 217.678) ตามลำดับ ด้วยข้อ จำกัด เหล่านี้จนถึงตอนนี้จริง ๆ แล้วมีสี่อาร์คที่สามารถวาดได้ดังนั้นทั้งสองธงจึงเลือกหนึ่งในนั้น ฉันเดาว่าคุณอาจต้องการวาดส่วนโค้งเล็ก ๆ (ความหมายlarge-arc-flag
= 0) ในทิศทางของมุมที่ลดลง (ความหมายsweep-flag
= 0) รวมเข้าด้วยกันเส้นทาง SVG คือ:
M 200 175 A 25 25 0 0 0 182.322 217.678
สำหรับตัวอย่างที่สอง (สมมติว่าคุณหมายถึงไปในทิศทางเดียวกันและเป็นส่วนโค้งขนาดใหญ่) เส้นทาง SVG คือ:
M 200 175 A 25 25 0 1 0 217.678 217.678
อีกครั้งฉันยังไม่ได้ทดสอบเหล่านี้
(แก้ไข 2016/06/01) ถ้าเช่น @clocksmith คุณสงสัยว่าทำไมพวกเขาเลือก API นี้มีลักษณะที่เป็นบันทึกการดำเนินงาน พวกเขาอธิบายการกำหนดค่าส่วนโค้งที่เป็นไปได้สองแบบคือ "การกำหนดพารามิเตอร์จุดสิ้นสุด" (อันที่พวกเขาเลือก) และ "การกำหนดพารามิเตอร์แบบกึ่งกลาง" (ซึ่งเหมือนกับคำถามที่ใช้) ในคำอธิบายของ "การกำหนดพารามิเตอร์จุดสิ้นสุด" พวกเขาพูดว่า:
ข้อดีอย่างหนึ่งของการปรับพารามิเตอร์ปลายทางคือการอนุญาตให้ใช้ไวยากรณ์เส้นทางที่สอดคล้องกันซึ่งคำสั่งเส้นทางทั้งหมดจะสิ้นสุดในพิกัดของ "จุดปัจจุบัน" ใหม่
ดังนั้นโดยทั่วไปแล้วมันเป็นผลข้างเคียงของส่วนโค้งที่ถูกพิจารณาว่าเป็นส่วนหนึ่งของเส้นทางที่ใหญ่กว่าแทนที่จะแยกวัตถุของพวกเขาเอง ฉันคิดว่าหากตัวแสดง SVG ของคุณไม่สมบูรณ์ก็สามารถข้ามไปยังส่วนประกอบของเส้นทางใด ๆ ก็ไม่ทราบวิธีการแสดงผลตราบใดที่มันรู้ว่าพวกเขาใช้เวลาหลายอาร์กิวเมนต์ หรืออาจช่วยให้การเรนเดอร์ของชิ้นส่วนของเส้นทางที่มีองค์ประกอบหลาย ๆ แบบขนานกัน หรือบางทีพวกเขาทำเพื่อให้แน่ใจว่าข้อผิดพลาดในการปัดเศษไม่ได้สร้างขึ้นตามความยาวของเส้นทางที่ซับซ้อน
บันทึกการใช้งานยังมีประโยชน์สำหรับคำถามเดิมเนื่องจากมีรหัสจำลองทางคณิตศาสตร์มากขึ้นสำหรับการแปลงระหว่างการกำหนดพารามิเตอร์สองแบบ (ซึ่งฉันไม่ทราบว่าเมื่อฉันเขียนคำตอบนี้ครั้งแรก)
arcSweep
ตัวแปรกำลังควบคุมlarge-arc-flag
พารามิเตอร์ svg A ในโค้ดด้านบนค่าsweep-flag
พารามิเตอร์จะเป็นศูนย์เสมอ อาจจะต้องเปลี่ยนเพื่อสิ่งที่ต้องการarcSweep
longArc