计算两点间的距离、点到线的距离,判断一点是否在一个圆内、一点是否在一矩形内、两圆是否相交

#ifndef HOMEWORK16_H_2013_06_19
#define HOMEWORK16_H_2013_06_19
/*
日期:2013-06-19
*/

//点
typedef struct Pointer
{
      double  x;
	  double  y;
} POINT;
extern POINT point1;
extern POINT point2;
extern POINT point3;
extern POINT point4;
extern POINT point5;
//线
typedef struct Line
{
	double a;
	double b;
	double c;
	double x;
	double y;

}LINE;
extern LINE line1;

//圆
typedef struct Circle
{
	double x;
	double y;
	double r;
}CIRCLE;
extern CIRCLE circle1;
extern CIRCLE circle2;
extern CIRCLE circle3;

//矩形
typedef struct Rect
{
	double a[2];
	double b[2];
	double c[2];
	double d[2];
}RECT;
extern RECT rect1;

double poinToPont(POINT point1,POINT point2);
double poinToLine(POINT point3,LINE line1);
double poinToCircle(POINT point4,CIRCLE circle1);
double pointToRect(POINT point5,RECT rect1);
double circleToCircle(CIRCLE circle2,CIRCLE circle3);

#endif
/*

日期:2013-06-19
*/

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include "homework16.h"

POINT point1;
POINT point2;
POINT point3;
POINT point4;
POINT point5;
LINE line1;
RECT rect1;
CIRCLE circle1;
CIRCLE circle2;
CIRCLE circle3;

/************************************************************************
函数名:poinToPont
功能: 计算点到点的距离
参数: point1,POINT point2
返回值:两点间的距离
************************************************************************/
double poinToPont(POINT point1,POINT point2)
{
	double LEN1;
	LEN1 = sqrt(abs((point1.x - point2.x)*(point1.x-point2.x)  + (point1.y - point2.y) * (point1.y - point2.y)));
	return LEN1;
}

/************************************************************************
函数名:poinToLine
功能:
参数:POINT point3 点的坐标
      LINE line1   直线ax+by+c=0
返回值:点到线的距离
************************************************************************/
double poinToLine(POINT point3,LINE line1)
{
	double LEN2;
	LEN2 = (abs(line1.a * point3.x + line1.b * point3.y + line1.c ) )/ (line1.a * line1.a + line1.b * line1.b);
	return LEN2;
}
/************************************************************************
函数名:poinToCircle
功能:判断一点是否在一圆内
参数:POINT point4  所要判断的点
      CIRCLE circle1 所要判断的圆
返回值:点在圆内返回1,不在圆内返回0;
************************************************************************/
double poinToCircle(POINT point4,CIRCLE circle1)
{
	double LEN3;
	LEN3 = sqrt( (point4.x - circle1.x) * (point4.x - circle1.x) + (point4.y-circle1.y) * (point4.y-circle1.y) ) ;
	if (LEN3<circle1.r)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
/************************************************************************
函数名:pointToRect
功能:判断一点是否在一矩形内
参数: POINT point5 点
       RECT rect1  矩形
返回值:1在矩形内,0不在矩形内
************************************************************************/
double pointToRect(POINT point5,RECT rect1)
{
    long double LEN4ae,LEN4ac,LEN4ab,LEN4bc,LEN4ec;

    LEN4ab = sqrt( (rect1.a[0] - rect1.b[0]) * (rect1.a[0] - rect1.b[0])+(rect1.a[1]-rect1.b[1]) * (rect1.a[1]-rect1.b[1]) ) ;
	LEN4ac = sqrt( (rect1.a[0] - rect1.c[0]) * (rect1.a[0] - rect1.c[0])+(rect1.a[1]-rect1.c[1]) * (rect1.a[1]-rect1.c[1]) ) ;
	LEN4bc = sqrt( (rect1.b[0] - rect1.c[0]) * (rect1.b[0] - rect1.c[0])+(rect1.b[1]-rect1.c[1]) * (rect1.b[1]-rect1.c[1]) ) ;
	LEN4ae = sqrt( (rect1.a[0] - point5.x) * (rect1.a[0] - point5.x)+(rect1.a[1]-point5.y) *(rect1.a[1]-point5.y) );
	LEN4ec = sqrt( (point5.x - rect1.c[0]) * (point5.x - rect1.c[0])+(point5.y-rect1.c[1]) * (point5.y-rect1.c[1]) ) ;

	if (LEN4ae+LEN4ec<LEN4ab+LEN4bc && LEN4ae+LEN4ec>LEN4ac)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
/************************************************************************
函数名:circleToCircle
功能:判断两圆是否相交
参数:CIRCLE circle2 圆1
      CIRCLE circle3 圆2
返回值:1相交,0不相交
************************************************************************/
double circleToCircle(CIRCLE circle2,CIRCLE circle3)
{
	double  LEN5;
	LEN5 = sqrt( (circle2.x - circle3.x) * (circle2.x - circle3.x) + (circle2.y - circle3.y) * (circle2.y - circle3.y) ) ;
	if (LEN5 < circle2.r+circle3.r && LEN5 > 0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
/*
功能:计算两点间的距离、点到线的距离,判断一点是否在一个圆内、一点是否在一矩形内、两圆是否相交

日期:2013-06-20
*/

#include<stdio.h>
#include<stdlib.h>
#include "homework16.h"

double main(void)
{
	//计算两点间的距离
	printf("计算两点间的距离n");
    printf("请输入两的坐标:(点的格式:x,y)");
    scanf("%lf,%lf %lf,%lf",&point1.x,&point1.y,&point2.x,&point2.y);
	printf("两点间的距离为:%.3lf",poinToPont(point1,point2));
	printf("n");

	//计算点到线的距离
	fflush(stdin);
	printf("nn计算点到线的距离n");
	printf("请输入点的坐标:(x,y)");
    scanf("%lf,%lf",&point3.x,&point3.y);
	printf("请依次输入直线ax+by+c=0的a,b,c:");
	scanf("%lf%lf%lf",&line1.a,&line1.b,&line1.c);
    printf("点到线的距离为:%.3lf",poinToLine(point3,line1));
	printf("n");

	//计算一点是否在一个圆内
	fflush(stdin);
	printf("nn计算一点是否在一个圆内n");
	printf("请输入点的坐标:(x,y)");
	scanf("%lf,%lf",&point4.x,&point4.y);
	printf("请依次输入圆的半径r以及圆心(x,y):");
	scanf("%lf%lf%lf",&circle1.r,&circle1.x,&circle1.y);
	printf("在圆内为1,反之为0:%0.lf",poinToCircle(point4,circle1));
	printf("n");

	//判断一点是否在一矩形内
	fflush(stdin);
	printf("nn判断一点是否在一矩形内n");
	printf("请输入点的坐标:(x,y)");
	scanf("%lf,%lf",&point5.x,&point5.y);
	printf("请按顺时针方向输入矩形的四个顶点a,b,c,d:");
	scanf("%lf,%lf %lf,%lf %lf,%lf %lf,%lf",&rect1.a[0],&rect1.a[1],&rect1.b[0],&rect1.b[1],&rect1.c[0],&rect1.c[1],&rect1.d[0],&rect1.d[1]);
	printf("在矩形内为1,反之为0:%d",pointToRect(point5, rect1) );
	printf("n");

	//判断两圆是否相交
	fflush(stdin);
	printf("nn判断两圆是否相交n");
	printf("请依次输入第一个圆的半径r以及圆心(x,y):");
	scanf("%lf%lf%lf",&circle2.r,&circle2.x,&circle2.y);
	printf("请依次输入第二个圆的半径r以及圆心(x,y):");
	scanf("%lf%lf%lf",&circle3.r,&circle3.x,&circle3.y);
	printf("在圆内为1,反之为0:%0.lf",circleToCircle(circle2,circle3));

	printf("n");
	system("pause");
	return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏恰童鞋骚年

数据结构基础温故-5.图(中):最小生成树算法

图的“多对多”特性使得图在结构设计和算法实现上较为困难,这时就需要根据具体应用将图转换为不同的树来简化问题的求解。

21520
来自专栏数据结构与算法

3411 洪水

3411 洪水 CodeVS原创  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 青铜 Bronze 题解  查看运行结果 题目描述 De...

33150
来自专栏数据结构与算法

HDU 3078 Network

Problem Description The ALPC company is now working on his own network system,...

36170
来自专栏数据科学学习手札

(数据科学学习手札03)Python与R在随机数生成上的异同

随机数的使用是很多算法的关键步骤,例如蒙特卡洛法、遗传算法中的轮盘赌法的过程,因此对于任意一种语言,掌握其各类型随机数生成的方法至关重要,Python与R在随机...

31570
来自专栏小樱的经验随笔

从零基础学三分查找

今晚是我们学长第二次讲课,讲了一个三分!认真听了一下,感觉不是很难,可能会比二分还简单些!我就把上课讲的内容归纳为一篇文章概述吧!以后也会重点讲解的! 简单点说...

478100
来自专栏Venyo 的专栏

环形颜色分布直方图

package com.imageretrieval.features; import java.util.ArrayList; import java.ut...

405110
来自专栏开发与安全

平衡二叉树 AVL 的插入节点后旋转方法分析

平衡二叉树 AVL( 发明者为Adel'son-Vel'skii 和 Landis)是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1。 首先我...

28400
来自专栏数据结构与算法

MatrixTree速成

前言 MatrixTree定理是用来解决生成树计数问题的有利工具 比如说这道题 MatrixTree定理的算法流程也非常简单 我们记矩阵A为无向图的度数矩阵 ...

36270
来自专栏Flutter入门

Android OpenGL ES(二)-正交投影

平移矩阵和单位矩阵和类似。但是向量[x,y,z,1]前乘这个平移矩阵后的结构就是平移矩阵中定义的偏移量。

46210
来自专栏图形学与OpenGL

7.5.5编程实例-Bezier曲线曲面绘制

      (a)Bezier曲线                         (b) Bezier曲面

25820

扫码关注云+社区

领取腾讯云代金券