`
scott________
  • 浏览: 21595 次
  • 性别: Icon_minigender_1
  • 来自: 哈尔滨
最近访客 更多访客>>
社区版块
存档分类
最新评论

pc 111302 uva 10180 Rope Crisis in Ropeland!

阅读更多
题目描述:
http://www.programming-challenges.com/pg.php?page=downloadproblem&probid=111302&format=html
另外做该题的时候参考了ybfq_wanglang的解题思路,地址如下:
http://hi.baidu.com/ybfq_wanglang/blog/item/9fff3b0d116176206159f33d.html
//该题关键在于判断线段是否与圆相交
//具体解释参见代码注释
//还有就是该题不用求切点坐标
//利用弧度完成圆弧段的长度计算
//用到反余弦函数
#include <cstdio>
#include <cmath>
#define eps 1e-8

struct point {
	double x, y;
};

struct line {
	point a, b;
};
//叉积
double xmult(point p1, point p2, point p0) {
	return (p1.x - p0.x) * (p2.y - p0.y) -
			(p2.x - p0.x) * (p1.y - p0.y);
}
//计算两点间距离
double distance(point p1, point p2) {
	return sqrt((p1.x - p2.x) * (p1.x - p2.x) +
				(p1.y - p2.y) * (p1.y - p2.y)); 
}
//计算点到直线距离
double disptoline(point p, point l1, point l2) {
	return fabs(xmult(p, l1, l2)) / distance(l1, l2);
}

//判断线段(端点都在圆外)和圆相交,不包括端点和相切
int intersect_seg_circle(point c, double r, point l1, point l2) {
	point t = c;
	t.x += l1.y - l2.y;
	t.y += l2.x - l1.x;
	//点t点c构成l1 l2 的垂线,如果l1 l2 在直线t c异侧 ,
	//且圆心到l1 l2 的距离小于 r,则l1 l2 与圆相交
	return xmult(l1, c, t) * xmult(l2, c, t) < eps &&
			disptoline(c, l1, l2) < r;
}



int main() {
	point p1, p2, origin;  //origin为圆心
	origin.x = origin.y = 0.0;
	double r;
	int ncase;
	scanf("%d", &ncase);
	while(ncase--) {
		scanf("%lf %lf %lf %lf %lf", &p1.x, &p1.y, &p2.x, &p2.y, &r);
		double d1 = distance(p1, p2);  //点p1 p2间的距离
		if(!intersect_seg_circle(origin, r, p1, p2))  //如果线段与圆不想交
			printf("%.3lf\n", d1);
		else {
			double d2 = distance(origin, p1);
			double d3 = distance(origin, p2);
			double d = sqrt(d2 * d2 - r * r);
			d += sqrt(d3 * d3 - r * r);
			double t = acos((d2 * d2 + d3 * d3 - d1 * d1) / (2 * d2 * d3));
			t -= acos(r / d2) + acos(r / d3);   //现在t为圆上的绳子对应的圆心角的弧度
			d += t * r;
			printf("%.3lf\n", d);
		}
	}
	return 0;
}
分享到:
评论

相关推荐

    Enough Rope to Shoot Yourself in the Foot Rules for C and C Programming

    Enough Rope to Shoot Yourself in the Foot Rules for C and C Programming

    Unity最新绳子插件《Ultimate Rope Editor V1.25》

    Physics and parameters can be tweaked in play mode for real time feedback, and the state can optionally be saved back to edit mode. This eliminates turnaround time and increases productivity. Check ...

    unity用于制作绳索的插件Rope

    unity用于制作绳索的插件Rope unity用于制作绳索的插件Rope unity用于制作绳索的插件Rope unity用于制作绳索的插件Rope

    3DMAX一键绳子插件Rope下载

    本文将详细介绍"3DMAX一键绳子插件Rope"的相关知识点。 1. **Rope插件介绍** Rope插件是一款专为3DMAX设计的工具,旨在快速生成逼真的绳索模型。它提供了一键化的操作方式,让设计师无需繁琐的步骤就能创建出具有...

    Unity 绳索插件 Obi Rope

    Unity 绳索插件 Obi Rope

    Unity3D绳索模拟插件-Obi Rope 6.5

    Obi Rope是一款专为Unity引擎设计的插件,旨在简化游戏开发过程中的绳索和布料模拟。无论您是开发2D还是3D游戏,Obi Rope都为您提供了强大的工具,让您能够轻松地在游戏中创建逼真的绳索效果,以及流动的布料模拟,...

    unity插件Rope Toolkit-2.2.0

    Rope Toolkit 为您的项目带来稳定、快速的绳索物理特性。绳索组件可用于模拟简单的钢丝或更高级的设置,包括需要主动碰撞检测的滑轮和重物。捆绑的示例场景展示了如何连接绳子来模拟起重机、绳桥、秋千和拳击场。 ...

    Obi Rope 4.1.unitypackage

    With Obi Rope you can create ropes in a matter of seconds, with complete control over their shape and behavior. The ropes can collide with the environment and with each other, and can be attached to ...

    Rope

    在IT领域,"Rope"通常指的是编程中的一个数据结构,特别是在文本编辑器或源代码管理软件中。Rope是一种高效处理大型文本的结构,它将大文本分割成多个小块,这些小块称为“片段”或“线段”,就像绳子是由许多细线...

    unity绳子插件 Obi Rope 6.0

    在本场景中,我们关注的是Obi Rope,这是一个专门针对Unity的绳索模拟插件,版本6.0。Obi Rope允许开发者在他们的游戏中创建逼真的绳索物理效果,适用于各种应用,如解谜游戏、物理模拟或视觉特效。 Obi Rope 6.0的...

    Obi Rope 6.1 - 超强的绳索插件.rar

    《Unity中的绳索模拟技术——以Obi Rope 6.1为例》 Unity3D作为一款广泛应用的游戏开发引擎,其强大的物理系统和图形渲染能力深受开发者喜爱。在游戏设计中,模拟真实世界的物理现象,如绳索的动态行为,能够极大地...

    Rope+BETA+4.0+链子+绳子脚本示例

    Rope是一个Python库,专注于源代码操作,提供了一套高级API来帮助开发者进行重构、代码分析和项目管理。Rope BETA 4.0是这个库的一个版本,它可能包含了一些新功能和改进,旨在提高开发者的生产力。 Rope的核心功能...

    Obi Rope 5.3.zip

    《Unity中的Obi Rope 5.3:模拟真实绳索物理效果的艺术》 Unity作为一款广泛应用的游戏开发引擎,因其强大的3D渲染、物理模拟和跨平台支持而深受开发者喜爱。在Unity中,模拟真实世界中的物体行为是提升游戏沉浸感...

    Rope3D数据集可视化,与kitti可视化不同,需要denorm相机内参文件

    Rope3D数据集可视化,与kitti可视化不同,需要denorm相机内参文件

    Obi+Rope是一款利用插件制作绳索的工具,可以很方便的做出有弹性的绳子 橡胶 铁链

    《Unity中的Obi+Rope:打造弹性物理模拟的绳索特效》 在3D游戏开发和视觉效果设计中,真实感的物理模拟是提升沉浸式体验的关键元素之一。Obi+Rope作为一款专为Unity引擎设计的插件,正是为了实现这种目标而诞生的。...

    Unity 绳子插件:Obi Rope 5.3.unitypackage

    With Obi Rope you can create ropes and rods in a matter of seconds, with complete control over their shape and behavior: Oriented particle technology allow rods to offer torsion/twisting effects....

    Obi Rope 3.3.1 exported

    Obi Rope 3.3.1 exported

    Obi Rope 3.2.zip

    《Unity中的Obi Rope 3.2:创造逼真的绳索物理效果》 Unity引擎以其强大的3D游戏开发能力和丰富的扩展性深受开发者喜爱。在众多的Unity插件中,Obi Rope 3.2无疑是一个专门针对绳索效果的杰出工具,它允许开发者...

    Ultimate Rope Editor 1.18.rar

    《Unity超强绳索制作插件:Ultimate Rope Editor 1.18详解》 在游戏开发领域,物理模拟效果的逼真度对于提升玩家沉浸感至关重要。尤其在涉及到绳索、链条这类动态元素时,真实感的模拟更是不可或缺。本文将深入探讨...

Global site tag (gtag.js) - Google Analytics