ตัวอย่างในบทความนี้แบ่งปันรหัสเฉพาะสำหรับคุณสำหรับ Java เพื่อพิจารณาว่าจุดอยู่ในช่วงที่วาดสำหรับการอ้างอิงของคุณกับคุณหรือไม่ เนื้อหาเฉพาะมีดังนี้
iSptinpoly.java
แพ็คเกจ com.ardo.util.circle; นำเข้า java.util.arraylist; นำเข้า java.util.list; /*** java กำหนดว่าจุดอยู่ในช่วงการวาด (โพลี【 isptinpoly 】/วงกลม【 distencepc 】)* @param จุดตรวจจับจุด* @param pts vertex ของรูปหลายเหลี่ยม* @@return point กลับมาจริงในรูปหลายเหลี่ยม จุดตรวจจับจุด @param* @param pts จุดสุดยอดของรูปหลายเหลี่ยม* @return point ส่งคืนจริงในรูปหลายเหลี่ยมมิฉะนั้นจะส่งคืน false*/ public boolean boolean iSptinpoly (จุด 2d, รายการ <point2d> pts) {int n = pts.size (); บูลีน boundorvertex = true; // ถ้าจุดอยู่บนจุดสุดยอดหรือขอบของรูปหลายเหลี่ยมมันสามารถถือได้ว่าเป็นจุดในรูปหลายเหลี่ยมและมันจะถูกส่งคืนโดยตรง int intersectCount จริง = 0; // นับคะแนนข้ามของ x double precision = 2E-10; // ความอดทนเมื่อเปรียบเทียบกับ 0 ระหว่างการคำนวณประเภทจุดลอยตัว Point2d P1, P2; // เพื่อนบ้านที่ถูกผูกไว้จุดยอดจุด 2d P = จุด; // จุดปัจจุบัน p1 = pts.get (0); // vertex ซ้ายสำหรับ (int i = 1; i <= n; ++ i) {// ตรวจสอบรังสีทั้งหมดถ้า (p.equals (p1)) {return boundorvertex; // p คือ vertex} p2 = pts.get > math.max (p1.x, p2.x)) {// ray อยู่นอกความสนใจของเรา p1 = p2; ดำเนินการต่อ; // เรย์ถัดไปจุดซ้าย} ถ้า (px> math.min (p1.x, p2.x) && px <math.max (p1.x, p2.x)) {// ray กำลังข้ามโดยอัลกอริทึม py> = math.min (p1.y, p2.y)) {// overlies บนเรย์แนวนอนกลับ Boundorvertex; } if (p1.y == p2.y) {// ray เป็นแนวตั้งถ้า (p1.y == py) {// ซ้อนทับบนเรย์แนวตั้งส่งคืน boundorvertex; } else {// ก่อน ray ++ intersectcount; }} else {// Cross Point ทางด้านซ้ายสองเท่า Xinters = (PX - P1.X) * (P2.Y - P1.Y)/(P2.X - P1.X) + P1.Y; // จุดข้ามของ Y ถ้า (Math.Abs (Py - Xinters) <Precision) } if (py <xinters) {// ก่อน ray ++ intersectcount; }}}} else {// กรณีพิเศษเมื่อเรย์กำลังข้ามผ่านจุดสุดยอดถ้า (px == p2.x && py <= p2.y) {// p ข้ามผ่าน p2 point2d p3 = pts.get ((i+1) % n); // vertex ถัดไปถ้า (px> = math.min (p1.x, p3.x) && px <= math.max (p1.x, p3.x)) {// px อยู่ระหว่าง p1.x & p3.x ++ intersectcount; } else {IntersectCount += 2; }}} p1 = p2; // next ray left point} ถ้า (intersectCount % 2 == 0) {// ตัวเลขแม้กระทั่งอยู่นอกรูปหลายเหลี่ยมส่งคืนเท็จ; } else {// ตัวเลขคี่อยู่ในรูปหลายเหลี่ยมส่งคืนจริง; }}/** * ตรวจสอบว่าอยู่ในวงกลม * @param p * @param c * @return */String String public String parentpc (Point2d P, Circle C) {// ตัดสินความสัมพันธ์ระหว่างระยะห่างระหว่างจุดและศูนย์กลางของวงกลมและรัศมีของวงกลม double d2 = math.hypot ((p.getx () - c.getcc (). getx ()), (p.gety () - c.getcc (). gety ())); System.out.println ("d2 =="+d2); double r = c.getr (); if (d2> r) {s = "นอกวงกลม"; } อื่นถ้า (d2 <r) {s = "ภายในวงกลม"; } else {s = "บนวงกลม"; } return s; } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {point2d point = new point2d (116.404072, 39.916605); // ทดสอบว่าจุดอยู่ในรายการรูปหลายเหลี่ยม <point2d> pts = arraylist ใหม่ <point2d> (); pts.add (ใหม่ Point2d (116.395, 39.910)); pts.add (ใหม่ Point2d (116.394, 39.914)); pts.add (ใหม่ Point2d (116.403, 39.920)); pts.add (ใหม่ Point2d (116.402, 39.914)); pts.add (ใหม่ Point2d (116.410, 39.913)); if (iSptInpoly (point, pts)) {system.out.println ("จุดอยู่ในรูปหลายเหลี่ยม"); } else {system.out.println ("จุดอยู่นอกรูปหลายเหลี่ยม"); } // ทดสอบว่าจุดอยู่ในวงกลม Point2d Centerpoint = ใหม่ Point2d (116.404172, 39.916605); วงกลม c = วงกลมใหม่ (); C.SetCC (Centerpoint); C.Setr (0.0056); String S = masterpc (จุด, c); System.out.println ("เป็นจุดในวงกลม:"+s); - Circle.java
/ ** * คลาสวงกลม * @author ardo * */ วงกลมระดับสาธารณะ {ส่วนตัวสองคู่ r; point2d ส่วนตัว CC; โมฆะสาธารณะ setr (double a) {r = a; } โมฆะสาธารณะ SetCC (Point2d Centerofcir) {cc = centerofcir; } สาธารณะ double getr () {return r; } สาธารณะ Point2d getCc () {return cc; - Point2d.java
ระดับสาธารณะ Point2d {สาธารณะสองเท่า; สาธารณะคู่ y; สาธารณะ point2d (double x, double y) {super (); this.x = x; this.y = y; } สาธารณะ double getx () {return x; } โมฆะสาธารณะ setx (double x) {this.x = x; } สาธารณะ double getey () {return y; } โมฆะสาธารณะ sety (double y) {this.y = y; -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น