จากวิกิพีเดีย :
เซนทรอยด์ของรูปหลายเหลี่ยมที่ไม่ได้ตัดกันที่กำหนดโดยจุดยอดn ( x 0 , y 0 ), ( x 1 , y 1 ), ... , ( x n - 1 , y n − 1 ) คือ จุด ( C x , C y ) โดยที่
และตำแหน่งAคือพื้นที่ที่ลงนามของรูปหลายเหลี่ยม
ในสูตรเหล่านี้จุดยอดจะถือว่าเป็นตัวเลขตามลำดับการเกิดขึ้นตามแนวเส้นรอบวงของรูปหลายเหลี่ยม นอกจากนี้จุดสุดยอด ( x n , y n ) จะถือว่าเป็นเช่นเดียวกับ ( x 0 , y 0 ) ความหมายi + 1บนต้องห่วงกรณีที่ผ่านมารอบ ๆ เพื่อi = 0 โปรดทราบว่าหากมีการนับคะแนนตามเข็มนาฬิกาตามลำดับพื้นที่Aซึ่งคำนวณไว้ข้างต้นจะมีเครื่องหมายลบ แต่พิกัด centroid จะถูกต้องแม้ในกรณีนี้
- รับรายการของจุดยอดในการสั่งซื้อ (ทั้งตามเข็มนาฬิกาหรือทวนเข็มนาฬิกา) หาเซนทรอยด์ของรูปหลายเหลี่ยมที่ไม่ตัดกันตัวเองปิดแทนโดยจุดยอด
- หากช่วยได้คุณอาจสมมติว่าอินพุตเป็น CW เท่านั้นหรือ CCW เท่านั้น พูดในคำตอบของคุณหากคุณต้องการสิ่งนี้
- พิกัดไม่จำเป็นต้องเป็นจำนวนเต็มและอาจมีจำนวนลบ
- ข้อมูลที่ป้อนจะถูกต้องและมีจุดยอดอย่างน้อยสามจุด
- อินพุตต้องได้รับการจัดการที่เหมาะสมกับชนิดข้อมูลจุดลอยตัวในภาษาของคุณ
- คุณอาจคิดว่าตัวเลขที่ป้อนจะมีจุดทศนิยมเสมอ
- คุณอาจจะคิดว่าปลายจำนวนเต็มป้อนข้อมูลในหรือ
.
.0
- คุณอาจใช้ตัวเลขที่ซับซ้อนสำหรับการป้อนข้อมูล
- ผลลัพธ์ควรมีความแม่นยำถึงหนึ่งในพันที่ใกล้ที่สุด
ตัวอย่าง
[(0.,0.), (1.,0.), (1.,1.), (0.,1.)] -> (0.5, 0.5)
[(-15.21,0.8), (10.1,-0.3), (-0.07,23.55)] -> -1.727 8.017
[(-39.00,-55.94), (-56.08,-4.73), (-72.64,12.12), (-31.04,53.58), (-30.36,28.29), (17.96,59.17), (0.00,0.00), (10.00,0.00), (20.00,0.00), (148.63,114.32), (8.06,-41.04), (-41.25,34.43)] -> 5.80104769975, 15.0673812762
ดูแต่ละรูปหลายเหลี่ยมบนระนาบพิกัดวางพิกัดโดยไม่ต้องวงเล็บเหลี่ยมในเมนู "แก้ไข" ของหน้านี้
ฉันยืนยันผลลัพธ์โดยใช้เครื่องคำนวณจุดแข็งรูปหลายเหลี่ยมแบบนี้ซึ่งแย่มาก ฉันไม่พบสิ่งที่คุณสามารถป้อนจุดยอดทั้งหมดได้ในครั้งเดียวหรือไม่ได้พยายามลบ-
เครื่องหมายของคุณเมื่อคุณพิมพ์ครั้งแรก ฉันจะโพสต์โซลูชัน Python ของฉันสำหรับการใช้งานของคุณหลังจากผู้คนมีโอกาสได้รับคำตอบ
x
s และy
s ทั้งหมดให้น้ำหนักทั้งหมดในจุดยอดแทนที่จะกระจายไปทั่วร่างกาย วิธีแรกเกิดขึ้นเพราะเป็นเรื่องปกติดังนั้นทั้งสองวิธีจึงสิ้นสุดที่ศูนย์สมมาตร วิธีที่สองใช้งานได้เพราะสามเหลี่ยมทั้งสองวิธีนำไปสู่จุดเดียวกัน