精华内容
下载资源
问答
  • 四点共圆的判定

    2021-01-18 13:17:46
    判断四点共圆,特殊方法是对角互补,但是由于此题中未强调顺序,判断对角有一定的难度。故采用更通用的方法: 设四为A,B,C,D(顺序无关) 先任取三点A、B、C 当A、B、C 不线时: \首先通过AB、AC的中垂线交点...

    题目来源:NEFU OJ-2248&
    湖南大学2020届ACM新生赛(同步赛) F

    OP

    此题不难,只不过推导比较闹心,多推几遍就AC了。

    思路

    判断四点共圆,特殊方法是对角互补,但是由于此题中未强调顺序,判断对角有一定的难度。故采用更通用的方法:

    设四点为A,B,C,D(顺序无关)
    先任取三点A、B、C
    当A、B、C 不共线时:

    \首先通过AB、AC的中垂线交点确定距此三点距离相等的点,并假定其为圆心;
    \再计算半径,并与第四点到假定圆心的距离进行比较,从而判断第四点是否共圆。

    当A、B、C 共线时:

    \显然没有圆满足与一条直线有三个交点,故四点不共圆。
    在这里插入图片描述

    具体实现上,可以通过中学的平面几何知识构造中垂线方程,解假定圆心,只不过推导较为繁琐。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    
    int main()
    {
        double x[4],y[4],xo,yo,down;
        int t,i,j;
        cin>>t;
        while(t--)
        {
            for(i=0; i<4; i++)cin>>x[i]>>y[i];
            down=(x[2]-x[0])*(y[0]-y[1])-(x[1]-x[0])*(y[0]-y[2]);
            down*=-1;
            if(fabs(down)<=1e-10)printf("no\n");//判断三点共线
            else
            {
                xo=(x[0]*x[0]-x[2]*x[2])*(y[0]-y[1])/2-(x[0]*x[0]-x[1]*x[1])*(y[0]-y[2])/2+(y[0]-y[2])*(y[0]-y[1])*(y[2]-y[1])/2;
                xo/=down;
                yo=(x[1]-x[0])/2*(-(x[0]*x[0]-x[2]*x[2])-(y[0]*y[0]-y[2]*y[2]))-(x[2]-x[0])/2*(-(x[0]*x[0]-x[1]*x[1])-(y[0]*y[0]-y[1]*y[1]));
                yo/=down;
                yo*=-1;
                //printf("%lf %lf\n",xo,yo);
                if(fabs((x[0]-xo)*(x[0]-xo)+(y[0]-yo)*(y[0]-yo)-(x[3]-xo)*(x[3]-xo)-(y[3]-yo)*(y[3]-yo))<=1e-10)
                     printf("yes\n");
                else printf("no\n");
            }
        }
        return 0;
    }
    

    ED

    此种方法也可以拓展为判断n点共圆;

    推 导 时 注 意 正 负 号 !

    展开全文
  • 项目5 判断点是否在内 请编写一个Java应用程序,判断给定的平面坐标(x1,y1)是否在一个指定半径的内。程序先请求输入的半径,再请求输入的x坐标和y坐标,然后给出判断点是否在内并打印输出结果。假定...

    项目5 判断点是否在圆内

    • 请编写一个Java应用程序,判断给定的平面点坐标(x1,y1)是否在一个指定半径的圆内。程序先请求输入圆的半径,再请求输入点的x坐标和y坐标,然后给出判断点是否在圆内并打印输出结果。假定圆心的位置在坐标原点(0,0),在圆上的点也被认为是在圆内。点到圆心的距离计算可以参考之前的DistanceBetweenTwoPoints.java源程序文件。当一个点判断完毕后,程序给出操作选择提示信息:是否继续判断还是退出程序。
      本项目要求实现三个方法:calculateDistance()方法用来计算两个点之间的距离,返回两点间的距离值;isInCircle()方法用来判断点是否在圆内,通过比较圆心到点的距离和指定的半径值返回true或false的结果;printResult()方法根据isInCircle()方法的返回结果输出相应的信息。

    • 参考代码:

      package FifthProject;
      
      import java.util.Scanner;
      
      public class LuoYu_5 {
          public static void main(String[] args) {
              Scanner input = new Scanner(System.in);
              System.out.print("What is the radius of the circle? ");
              double radius = input.nextDouble();
              System.out.print("\nEnter the x coordinate: ");
              double x = input.nextDouble();
              System.out.print("Enter the y coordinate: ");
              double y = input.nextDouble();
              System.out.printf("The point (%.2f,%.2f), ",x,y);
              printResult(x,y,radius);
              int flag = -1;
              System.out.print("Enter 0 to exit or 1 to continue: ");
              while ((flag = input.nextInt()) == 1){
                  System.out.print("Enter the x coordinate: ");
                  x = input.nextDouble();
                  System.out.print("Enter the y coordinate: ");
                  y = input.nextDouble();
                  System.out.printf("The point (%.2f,%.2f), ",x,y);
                  printResult(x,y,radius);
                  System.out.print("Enter 0 to exit or 1 to continue: ");
              }
          }
      
          public static double calculateDistance(double x,double y){
              return Math.sqrt(x * x + y * y);
          }
          public static boolean islnCircle(double x,double y,double patterndisance) {
              if (calculateDistance(x,y) > patterndisance) {
                  return false;
              }
              else
                  return true;
          }
      
          public static void printResult(double x,double y,double p){
              if (islnCircle(x,y,p))
                  System.out.printf("is in of the circle with radius %.2f\n\n",p);
              else
                  System.out.printf("is out the circle with radius %.2f\n\n",p);
          }
      }
      
      
    • 结果显示:

      What is the radius of the circle? 27
      
      Enter the x coordinate: 22
      Enter the y coordinate: 26
      The point (22.00,26.00), is out the circle with radius 27.00
      
      Enter 0 to exit or 1 to continue: 1
      Enter the x coordinate: 17
      Enter the y coordinate: 22
      The point (17.00,22.00), is out the circle with radius 27.00
      
      Enter 0 to exit or 1 to continue: 1
      Enter the x coordinate: 5
      Enter the y coordinate: 7
      The point (5.00,7.00), is in of the circle with radius 27.00
      
      Enter 0 to exit or 1 to continue: 0
      
      Process finished with exit code 0
      
      
    展开全文
  • (1)先建立一个Point()类,包含数据成员x,y(坐标); (2)以Point为基类,派生出一个Circle()类,...(4)定义友元函数int locate,判断点p与的位置关系(返回值0 外);   int main( )  { 
    (1)先建立一个Point(点)类,包含数据成员x,y(坐标点);
    
    (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员(半径),基类的成员表示圆心;
    (3)编写上述两类中的构造、析构函数及必要运算符重载函数(本项目主要是输入输出);
    (4)定义友元函数int locate,判断点p与圆的位置关系(返回值<0圆内,==0圆上,>0 圆外);
     

    int main( )  

    {  

        Circle c1(3,2,4),c2(4,5,5);      //c2应该大于c1   

        Point p1(1,1),p2(3,-2),p3(7,3);  //分别位于c1内、上、外   

      

      

        cout<<"圆c1: "<<c1;  

       

        cout<<"点p1: "<<p1;  

        cout<<"点p1在圆c1之"<<((locate(p1, c1)>0)?"外":((locate(p1, c1)<0)?"内":"上"))<<endl;  

       

       cout<<"点p2: "<<p2;  

        cout<<"点p2在圆c1之"<<((locate(p2, c1)>0)?"外":((locate(p2, c1)<0)?"内":"上"))<<endl;  

           cout<<"点p3: "<<p3;  

        cout<<"点p3在圆c1之"<<((locate(p3, c1)>0)?"外":((locate(p3, c1)<0)?"内":"上"))<<endl;  

        return 0;  

    }  

    代码如下:

    #include <iostream>
    using namespace std;
    class Circle;
    class Point
    {
    protected:
        double x,y;
    public:
        Point(int xx=0,int yy=0):x(xx),y(yy) {}
        friend ostream& operator<<(ostream&output,const Point &c);
        friend double locate(Point &p,Circle &c); //点与圆的位置关系
    };
    ostream& operator<<(ostream&output,const Point &c)
    {
        output<<"("<<c.x<<","<<c.y<<")"<<endl;
        return output;
    }
    
    class Circle:public Point
    {
    protected:
        double r;
    public:
        Circle(int xx=0,int yy=0,double rr=0):Point(xx,yy),r(rr){};
        friend ostream& operator<<(ostream&output,const Circle &c);
        friend double locate(Point &p,Circle &c); //点与圆的位置关系
    };
    ostream& operator<<(ostream&output,const Circle &c)
    {
        output<<"("<<c.x<<","<<c.y<<","<<c.r<<")"<<endl;
        return output;
    }
    double locate(Point &p,Circle &c)
    {
        if(((p.x-c.x)*(p.x-c.x)+(p.y-c.y)*(p.y-c.y))<(c.r*c.r))
            return -1;
        else if(((p.x-c.x)*(p.x-c.x)+(p.y-c.y)*(p.y-c.y))>(c.r*c.r))
            return 1;
        else
            return 0;
    }
    
    int main( )
    {
        Circle c1(3,2,4),c2(4,5,5);      //c2应该大于c1
        Point p1(1,1),p2(3,-2),p3(7,3);  //分别位于c1内、上、外
    
    
        cout<<"圆c1: "<<c1;
    
        cout<<"点p1: "<<p1;
        cout<<"点p1在圆c1之"<<((locate(p1, c1)>0)?"外":((locate(p1, c1)<0)?"内":"上"))<<endl;
    
        cout<<"点p2: "<<p2;
        cout<<"点p2在圆c1之"<<((locate(p2, c1)>0)?"外":((locate(p2, c1)<0)?"内":"上"))<<endl;
    
        cout<<"点p3: "<<p3;
        cout<<"点p3在圆c1之"<<((locate(p3, c1)>0)?"外":((locate(p3, c1)<0)?"内":"上"))<<endl;
        return 0;
    }

    总结:判断点与圆位置关系的友元函数需要在基类和派生类中都需要声明。这是因为这个函数有同时引用这两个类的对象,就是Point &p,Circle &c

    另一种解法;

    代码如下:

    #include <iostream>
    #include <cmath>
    using namespace std;
    class Circle;
    class Point
    {
    protected:
        double x,y;
    public:
        Point(int xx=0,int yy=0):x(xx),y(yy) {}
        friend ostream& operator<<(ostream&output,const Point &c);
        double distance(const Point &p) const;  //求距离
    };
    ostream& operator<<(ostream&output,const Point &c)
    {
        output<<"("<<c.x<<","<<c.y<<")"<<endl;
        return output;
    }
    double Point::distance(const Point &p) const
    {
        double dx = this->x-p.x;
        double dy = this->y-p.y;
        return sqrt(dx*dx+dy*dy);
    
    }
    
    class Circle:public Point
    {
    protected:
        double radius;
    public:
        Circle(int xx=0,int yy=0,double rr=0):Point(xx,yy),radius(rr){};
        friend ostream& operator<<(ostream&output,const Circle &c);
        friend int locate(Point &p,Circle &c); //点与圆的位置关系
    };
    ostream& operator<<(ostream&output,const Circle &c)
    {
        output<<"("<<c.x<<","<<c.y<<","<<c.radius<<")"<<endl;
        return output;
    }
    int locate(Point &p,Circle &c)
    {
        const Point cp(c.x,c.y); //圆心
        double d = cp.distance(p);
        if (d < c.radius)
            return -1;  //圆内
        else if(d>c.radius)
            return 1;  //圆外
            else
                return 0; //相等
    }
    
    int main( )
    {
        Circle c1(3,2,4),c2(4,5,5);      //c2应该大于c1
        Point p1(1,1),p2(3,-2),p3(7,3);  //分别位于c1内、上、外
    
    
        cout<<"圆c1: "<<c1;
    
        cout<<"点p1: "<<p1;
        cout<<"点p1在圆c1之"<<((locate(p1, c1)>0)?"外":((locate(p1, c1)<0)?"内":"上"))<<endl;
    
        cout<<"点p2: "<<p2;
        cout<<"点p2在圆c1之"<<((locate(p2, c1)>0)?"外":((locate(p2, c1)<0)?"内":"上"))<<endl;
    
        cout<<"点p3: "<<p3;
        cout<<"点p3在圆c1之"<<((locate(p3, c1)>0)?"外":((locate(p3, c1)<0)?"内":"上"))<<endl;
        return 0;
    }
    
    


    总结:任何课程都有联系的,学好数学很重要

    展开全文
  • 项目要求 (1)先建立一个Point()类,包含数据成员x,y(坐标); (2)以Point为基类,派生出一个Circle()...(4)定义友元函数int locate,判断点p与的位置关系(返回值0 外); 代码如下 #include

    项目要求

    (1)先建立一个Point(点)类,包含数据成员x,y(坐标点);
    (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员(半径),基类的成员表示圆心;
    (3)编写上述两类中的构造、析构函数及必要运算符重载函数(本项目主要是输入输出);
    (4)定义友元函数int locate,判断点p与圆的位置关系(返回值<0圆内,==0圆上,>0 圆外);


    代码如下

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    class Point
        {
    public:
        Point(double a,double b)
            {
            x=a;
            y=b;
            }
        double get_distance(Point &p);
        friend ostream & operator<<(ostream &out,const Point &p);
    protected:
        double x;
        double y;
        };
    double Point::get_distance(Point &p)
        {
        return sqrt((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
        }
    
    class Circle:public Point
        {
    public:
        Circle(double a,double b,double r):Point(a,b),r(r) {}
    
        friend int locate(Point p,Circle c);
        friend ostream & operator<<(ostream &out,const Circle &c);
    protected:
        double r;
        };
    
    int locate(Point p,Circle c)
        {
        Point cc(c.x,c.y);
        double d=p.get_distance(cc);
        if (d>c.r)
            return 1;
        else if (d<c.r)
            return -1;
        else
            return 0;
        }
    
    
    ostream & operator<<(ostream &out,const Point &p)
        {
        out<<"("<<p.x<<","<<p.y<<")"<<endl;
        return out;
        }
    ostream & operator<<(ostream &out,const Circle &c)
        {
        out<<"圆心为:("<<c.x<<","<<c.y<<"),半径为:"<<c.r<<endl;
        return out;
        }
    
    
    int main( )
        {
        Circle c1(3,2,4),c2(4,5,5);      //c2应该大于c1
        Point p1(1,1),p2(3,-2),p3(7,3);  //分别位于c1内、上、外
    
    
        cout<<"圆c1: "<<c1;
    
        cout<<"点p1: "<<p1;
        cout<<"点p1在圆c1之"<<((locate(p1, c1)>0)?"外":((locate(p1, c1)<0)?"内":"上"))<<endl;
    
        cout<<"点p2: "<<p2;
        cout<<"点p2在圆c1之"<<((locate(p2, c1)>0)?"外":((locate(p2, c1)<0)?"内":"上"))<<endl;
    
        cout<<"点p3: "<<p3;
        cout<<"点p3在圆c1之"<<((locate(p3, c1)>0)?"外":((locate(p3, c1)<0)?"内":"上"))<<endl;
        return 0;
        }
    


    运行结果


    展开全文
  • 判断点的位置关系

    千次阅读 2020-07-02 20:37:47
    判断点的位置关系 第一步,创建一个类,代表二维空间的一个。二维空间确定一个可参考平面直角坐标系中,确定了x坐标和y坐标,即可确定的位置 package com.tyl.homework; import java.util.Scanner; /** ...
  • ACM算法_判断四点共

    千次阅读 2018-01-31 11:04:30
    ACM算法_判断四面 给出三维空间上的四个点(点与点的位置均不相同),判断这4个点是否在同一个平面内(4点共线也算面)。 方法 四个点构造三个向量,形成一个行列式。若行列式的值为0,则面;不为0...
  • #include "Stdio.h" main() { int ix,iy; printf("please input a point coordinates :");//coordinates是坐标 scanf("%d%d",&...里\n" ); els...
  • 问题及代码: /* ...*All rights reserved....*文件名称:Circle.cpp *作 者:单昕昕 *完成日期:2015年5月23日 *版 本 号:v1.0 ...(1)先建立一个Point()类,包含数据成员x,y(坐标); (2)以Point为基
  • 到圆心的距离公式也就是两间距离公式: #include <iostream> using namespace std; //类 class Point{ public: //设置一个的坐标 void setXY(int x, int y){ m_x = x; m_y = y; } ...
  • java面向对象-判断点的关系

    千次阅读 2018-03-09 16:38:19
    20180308 java java面向对象-判断点的关系判断点的关系(在外、在圆周上、在内)//练习程序//对象class Point{ private int x;//横坐标 private int y;//纵坐标 Point(int x,int y) { this.x = x;...
  • //判断点的关系。 class Points { private int x; private int y; Points(int x,int y) { this.x=x; this.y=y; } public int getX()//获取x的值 { return x; } p
  • 判断一个内还是

    千次阅读 2018-07-23 23:54:21
    首先可以先确定一个的申明方式,后续可以通过来确定圆心。 #ifndef _POINT_H #define _POINT_H class Point {  private:  int m_x;  int m_y;  public:  void setxy(int x,int y);  int getdistance(Poi....
  • 相交的判断

    千次阅读 2016-01-20 11:51:40
    相交的判断,本质在求解联立方程。我们以平面上(二维)的直线和为例,其方程分别为: (x−a)2+(y−b)2=r2y=kx+c⇓(x−a)2+(kx+c−b)2=r2⇓(1+k2)x2+2(kc−kb−a)x+a2+(c−b)2−r2=0Δ=4(kc−kb−a)2−4(1+...
  • //判断一个是否在以(0,0)为圆心,半径不定的内 import java.util.Scanner; import javax.swing.JOptionPane; public class Study4 { public static void main(String[] args) { int x = 0;//圆心x...
  • 需求1:定义一“”(Circle)类,圆心为“”Point类,构造一,求的周长和面积,并判断的关系 分析: Circle: 特征:圆心,半径 行为:的周长和面积 Point: 特性:x y 实现1:首先创建...
  • 编写c++程序用来判断点内(包括上)还是外,要求用坐标轴判断。    Point.h #ifndef _POINT_H #define _POINT_H class Point { private: int m_x; int m_y; public: void setxy(int x,int y);...
  • C++实现判断点在四边形、的内部

    千次阅读 2019-06-24 17:07:53
    代码说明: 1. 根据与直线的关系,确定...(当然,如果使用opencv的mask,很容易就能判断出点是否在四边形或者内部) #include <iostream> #include <opencv2\opencv.hpp> using namespace ...
  • public class CircleAreaJudge { private double cx = 0.0D; private double cy = 0.0D; private double r = 0.0D; public CircleAreaJudge(double x, double y, double r) { try { ...
  • } 判断一个是否位于内(由三个上的确定)。 思路: 1. 上任意三个线。 2. 上三个构成的三角形的垂直平分线交于圆心,即三角形的外接。 3. 直线方程的点斜式,y=k(x-x1)+y1。 4. 斜率的...
  • 主要有两种方法 先求出三角形的外接的圆心的坐标,然后判断到圆心...设三角形为ABC,判断D是否在ABC的外接内,假设设C和D在AB同侧,则比较∠ADC和∠ACB的大小就可以判断点C是在上、内、外了 ...
  • python练习_定义定义点判断关系 定义一个类,包括坐标x,坐标y, 定义一个类,包括圆点cp和半径r, 方法:1.求的面积;2.求的周长;3.判断一个实例和实例的关系。 import math class Pointer(object):...
  • 最近项目做GIS地图应用,需求是判断某个是否在圈内,多边形内,区域内,网上找了好久都没找到合适的方法,看百度demo时,看着某个api特别像有能力的样子,试了一下,还真成功了。 关键类:LatLngBounds 关键...
  • 判断一点是否在三角形的外接

    千次阅读 2015-09-21 23:07:47
    在平面上,如果已知△P0P1P2\triangle P_0 P_1 P_2的三个顶点坐标P0(x0,y0), P1(x1,y1), P2(x2,y2)P_0(x_0, y_0),\space P_1(x_1,y_1),\space P_2(x_2,y_2)和另一点PP的坐标(x,y)(x,y),要判断点P是否在△P0P1P2\...
  • Java学习-面向对象实现的关系判断

    千次阅读 热门讨论 2018-04-16 20:39:18
     面向对象是Java中的基本,根源,本篇博客,小编将结合一个两个类的关系,来好好地整理一下面向对象中的那些事。 两个类  一、创建类Point 1.成员变量:x,y 2.构造方法:Point(doublex,double y...
  • 判断矩形和

    2020-12-01 14:04:35
    方法一:先判断矩形是否在内(矩形的个顶点是否在内),若是则不相交,否则再判断圆心到矩形条边的最短距离(到线段的最短距离)是否存在小于半径的,若是则相交(认为矩形包括是不相交的,已经先排除了)...
  • class DisPoint//定义一个距离类,通过提供两坐标来进行两之间距离的计算 { public:  double CalculateDis(MyPoint & myp01, MyPoint & myp02);  int CalculateL(AdvCircle &mp01, AdvCircle &mp02); }; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 117,006
精华内容 46,802
关键字:

如何判断四点共圆