第十七届黑龙江省大学生程序设计竞赛(金牌题)DCollision Detector

题目链接:https://codeforces.com/gym/103688/problem/D

 题意:3个半径为1的小球,O1可以向任何方向移动,如果它撞到小球O2,O2会向与O1相切的方向运动,就是判断一下小球O2能否撞到静止小球O3。

代码:

#include<bits/stdc++.h>
#define lmw ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); 
using namespace std;
const int N=1e6+10;
int a[N];
struct node{
	double x,y;
}ab,bc;
double add(node a,node b){
	return a.x*b.x+a.y*b.y;
}
signed main(){
	int t;
	cin>>t;
	while(t--){
		double x1,y1,x2,y2,x3,y3;
		cin>>x1>>y1>>x2>>y2>>x3>>y3;
		double d12=sqrt((y1-y2)*(y1-y2)+(x1-x2)*(x1-x2));
		double d23=sqrt((y3-y2)*(y3-y2)+(x3-x2)*(x3-x2));
		double cosa=2.0/d12;
		double d22=sqrt(d23*d23-4);
		double cosb=d22/d23;
		double sina=sqrt(d12*d12-4)/d12;
		double sinb=2.0/d23;
		double cosab=cosa*cosb-sina*sinb;
		ab={x2-x1,y2-y1};
		bc={x3-x2,y3-y2};
		double cosr=add(ab,bc)/d23/d12;
		if(cosr-cosab>1e-7) cout<<"yes\n";
		else cout<<"no\n";
	}
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是另一种实现方式的 MATLAB 代码,同样实现了数出图像中的人数和在集体照中找到自己的功能: ```matlab % 读取集体照和个人照片 group = imread('group.bmp'); single = imread('single.bmp'); % 将集体照转为灰度图像 gray_group = rgb2gray(group); % 二值化集体照 bw_group = gray_group < 200; % 去除小的噪声点 bw_group = bwareaopen(bw_group, 10); % 统计集体照中的人数 [L, num] = bwlabel(bw_group); disp(['人数为:', num2str(num)]); % 对个人照片进行预处理 gray_single = rgb2gray(single); bw_single = gray_single < 200; % 在集体照中寻找个人 corr_map = normxcorr2(bw_single, bw_group); [ypeak, xpeak] = find(corr_map == max(corr_map(:))); yoffset = ypeak-size(bw_single,1); xoffset = xpeak-size(bw_single,2); % 在集体照上用矩形框标出个人位置 figure, imshow(group), hold on rectangle('Position', [xoffset+1, yoffset+1, size(bw_single,2), size(bw_single,1)], 'EdgeColor', 'r', 'LineWidth', 2); ``` 与之前的代码相比,该代码没有使用人脸检测器,而是直接对图像进行了二值化处理。具体来说,将集体照和个人照片都转为灰度图像,使用阈值 200 对灰度图像进行二值化处理,将像素值大于 200 的设置为 1,像素值小于等于 200 的设置为 0。这样得到的二值图像中,人的区域为白色,背景为黑色。 接着,对集体照二值图像进行去噪、统计人数等操作,与之前的代码相同。对个人照片进行预处理后,使用 normxcorr2 函数在集体照中寻找个人,并在集体照上用矩形框标出个人位置。 这种实现方式相对于使用人脸检测器来说,更加简单直接,但也可能会出现一些误差。因此,在实际应用中,需要根据具体情况选择合适的方法来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值