2021牛客暑期多校训练营2 - F - Girlfriend ( 球体积相交 )

ray-sphere-intersection:测试射线是否与球体相交 射线球相交 测试射线是否与球体相交。 var intersect = require ( 'ray-sphere-intersection' ) var origin = [ 0 , 0 , 4 ] , direction = [ 0 , 0 , - 1 ] , center = [ 0 , 0 , 0 ] , radius = 1 var hit = intersect ( [ ] , origin , direction , center , radius ) if ( hit ) { console . log ( hit ) // [0, 0, 1] } 改编自 。 PR的优化/等欢迎。 用法 out = intersect(out, origin, direction, center, radius) 确定3D射线(origin, dir 立即下载
题目连接:点击进入
题目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

题意

在这里插入图片描述
A、B、C、D、k1、k2 已知,根据不等式, P1 的取值会形成一个图形,P2 类似,求两个图形的交

思路

这个式子取等号是阿波罗尼斯圆,二维平面是圆,三维是球壳,取不等式就变成了实心球,所以就变成了两个球求相交体积。
对式子带入,计算,化简(貌似这里,,,跟知不知道阿波罗尼斯圆没什么关系?!)
在这里插入图片描述
在这里插入图片描述
备注:公式图片来自于here

代码(模板偷自刘爷)
//#pragma GCC optimize(3)//O3
//#pragma GCC optimize(2)//O2
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define best 131
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define lowbit(x) x & -x
#define inf 0x3f3f3f3f
//#define int long long
//#define double long double
//#define rep(i,x,y) for(register int i = x; i <= y;++i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const double pai=acos(-1.0);
const int maxn=1e6+10;
const int mod=998244353;
const double eps=1e-9;
const int N=5e3+10;
 
//inline int read()
//{
//    int k = 0, f = 1 ;
//    char c = getchar() ;
//    while(!isdigit(c)){if(c == '-') f = -1 ;c = getchar() ;}
//    while(isdigit(c)) k = (k << 1) + (k << 3) + c - 48 ,c = getchar() ;
//    return k * f ;
//}
 
double pow2(double x){return x*x;}
double pow3(double x){return x*x*x;}
double dis(double x1,double y1,double z1,double x2,double y2,double z2)
{
    return pow2(x1-x2)+pow2(y1-y2)+pow2(z1-z2);
}
double cos(double a,double b,double c){return (b*b+c*c-a*a)/(2*b*c);}
double cap(double r,double h){return pai*(r*3-h)*h*h/3;}
//2球体积交
double sphere_intersect(double x1,double y1,double z1,double r1,double x2,double y2,double z2,double r2)
{
    double d=dis(x1,y1,z1,x2,y2,z2);
    //相离
    if(d>=pow2(r1+r2))return 0;
    //包含
    if(d<=pow2(r1-r2))return pow3(min(r1,r2))*4*pai/3;
    //相交
    double h1=r1-r1*cos(r2,r1,sqrt(d)),h2=r2-r2*cos(r1,r2,sqrt(d));
    return cap(r1,h1)+cap(r2,h2);
}
//2球体积并
double sphere_union(double x1,double y1,double z1,double r1,double x2,double y2,double z2,double r2)
{
    double d=dis(x1,y1,z1,x2,y2,z2); 
    //相离
    if(d>=pow2(r1+r2))return (pow3(r1)+pow3(r2))*4*pai/3;
    //包含
    if(d<=pow2(r1-r2))return pow3(max(r1,r2))*4*pai/3;
    //相交
    double h1=r1+r1*cos(r2,r1,sqrt(d)),h2=r2+r2*cos(r1,r2,sqrt(d));
    return cap(r1,h1)+cap(r2,h2);
}
 
double x[4],y[4],z[4],k1,k2;
 
int main()
{
//  ios::sync_with_stdio(false);
//  cin.tie(0);cout.tie(0);
    int t;
    cin>>t;
    while(t--)
    {
        for(int i=0;i<4;i++)
            cin>>x[i]>>y[i]>>z[i];
        cin>>k1>>k2;
        double x1=(k1*k1*x[1]-x[0])/(k1*k1-1);
        double y1=(k1*k1*y[1]-y[0])/(k1*k1-1);
        double z1=(k1*k1*z[1]-z[0])/(k1*k1-1);
        double r1=sqrt(x1*x1+y1*y1+z1*z1+(x[0]*x[0]+y[0]*y[0]+z[0]*z[0]-k1*k1*(x[1]*x[1]+y[1]*y[1]+z[1]*z[1]))/(k1*k1-1));
                 
        double x2=(k2*k2*x[3]-x[2])/(k2*k2-1);
        double y2=(k2*k2*y[3]-y[2])/(k2*k2-1);
        double z2=(k2*k2*z[3]-z[2])/(k2*k2-1);
        double r2=sqrt(x2*x2+y2*y2+z2*z2+(x[2]*x[2]+y[2]*y[2]+z[2]*z[2]-k2*k2*(x[3]*x[3]+y[3]*y[3]+z[3]*z[3]))/(k2*k2-1));
                 
        printf("%.3lf\n",sphere_intersect(x1,y1,z1,r1,x2,y2,z2,r2));
    }
    return 0;
}
SpringBoot文件上传实战:MultipartFile重复读取的3种方法(附避坑指南) 本文详细介绍了SpringBoot中处理MultipartFile重复读取的3种实用方法,包括字节数组缓存法、临时文件法和流重置法,并提供了避坑指南和性能优化技巧。特别适合需要多次读取上传文件内容的开发者,帮助解决InputStream流只能读取一次的问题。 阅读详情

相关推荐

【车辆仿真】从0开始建立dSPACE RT Simulink工程:输出模拟电平

0基础建议先看下前面的博文,补充基础知识。原来的博文太长太复杂,后续我会逐步梳理改进,去除操作层面的内容,仅关注知识层面,提升系列博文的系统性。【工程环境信息】:上位机:惠普台式PC(Windows 11专业版)下位机(实时机):SCALEXIO RTPC板卡:DS2680。

winnizap的博客 2054

2021牛客多校2 - Girlfriend(球体积交)

题目链接:点击查看 题目大意:空间内有6个点,满足 ∣P1A∣≥k1∣P1B∣,∣P2C∣≥k2∣P2D∣|P_1A|\ge k_1|P_1B|,|P_2C|\ge k_2|P_2D|∣P1​A∣≥k1​∣P1​B∣,∣P2​C∣≥k2​∣P2​D∣,求 P1,P2P_1,P_2P1​,P2​ 各自轨迹围成的空间体的体积交 题目分析:三维坐标系中两点之商为定值的话表示的是一个球壳,叫阿波罗尼斯球壳 囤个板子,求两球体积交的 代码: // Problem: Girlfriend // Contest: Now

Falcon的博客 422

高光谱图像处理和分析软件(包含雷尼绍Renishaw wdf 文件导入解析功能)

是一款基于微软windows操作系统的多传感器成像工具,用于处理和分析高光谱图像。它是一个模块化的系统,由一个基本的引擎,一个图形用户界面,一个化学计量工具箱和可选的用户提供的模块组成。它支持最重要的光谱成像技术,如UV/Vis、红外、拉曼、太赫兹、光发射/吸收和质谱。除此之外,还允许用户将高光谱图像与物理属性图和传统高分辨率彩色照片合并在一起 链接:https://pan.baidu.com/s/1ruQ5YSh5_ZS9wx_V3Q5Oow 提取码:qdx0 ...

业余程序员小徐的博客 8067

百行代码手写光线追踪

如果我们将交点作为新射线的原点,那么我们可能会将我们现在所在的球体检测为交点和光线之间的物体(intersection在某个objects的表面上,min_distance直接等于0)。到目前为止,我们知道是否存在一条从摄像机/眼睛到物体的直线,我们也知道这是哪个物体,以及我们正在观察的物体的确切部分。在现实中,光从光源发出,向所有方向扩散,反射在物体上,然后进入你的眼睛。这是因为解方程的 t 可以是负值,但这意味着与球面相交的射线的方向向量不是 d,而是 -d(例如,如果球面位于摄像机和屏幕的后面)。

weixin_41914570的博客 1654

Unity Acceleratorc与Cache Server unity的缓存服务器

文章目录1.作用概述2.用法(使用,看这个就够了)服务端下载部署Unity Acceleratorc修改http管理端口修改Editor连接端口客户端使用(设置好一次提交设置,团队拉取即可全部生效)3.测试平台切换测试资源导入测试(打开编辑器的情况下)项目启动测试(不打开编辑器的情况下)4.不同版本表现5.服务端监控6.服务端缓存7.冲突8.预警9.不同项目/不同配置-同种资源10.缓存清除 1.作用概述 编辑器模式下,导入资源,切换平台unity都会重新识别资源,大型项目很浪费时间,使用Cache Ser

euphorias的博客 3812

几款支持国标GB28181的平台以及视频监控设备接入的配置方法(Web端无插件播放)

GB28181解决的一个主要问题就是如何远程、跨网络、跨区域、跨级别的访问网络中的监控设备(包括IPC、NVR等),本文介绍几款G28181平台的接入配置方法,适合有监控视频摄像头的远程接入和预览需求的人群参考使用。

一名高级工程师的博客 1万+

胶囊体与球相交检测

胶囊体是由中间一个长度为 d,半径为 r 的圆柱体和两端两个半径为 r 的半球连接在一起的3D模型,下图 胶囊体的数学定义:到一条线段(上图圆柱体中心的红线)距离 小于等于 r 的所有点的集合。 球的数学定义:到一个点距离小于等于 r 的所有点的集合。 胶囊体与球的相交检测可以转换为点到线段的距离判断。 胶囊体半径为 r1,长度为 d,圆柱体两端中心点坐标(上图红线段两端点)分别为 A、B 球半径为 r2,球心坐标为 P 则如果点P 到线段 AB 的距离 小于等于 r1 + r2,则球.

lq 1981

【32】软考软件设计师——算法题(一):分治法与动态规划深度精讲|下午第4题常考满分攻略

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第32篇,正式开启**模块四:应用技术(下午题)算法大题专项**,聚焦下午第4道高频必考大题核心两大算法:分治法与动态规划。全文超4000字深度拆解两大经典算法的底层核心思想、算法策略识别技巧、递归边界设计、状态转移方程推导,全覆盖代码填空高频考点、时间复杂度分析、经典题型解题套路;配套可直接默写的递归代码模板、DP状态设计范式、真题完整填空案例,彻底解决考生分不清分治与DP、递归边界写错、状态转移推不出、复杂度算不对四大核心痛点。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 636

碰撞检测之Sphere-Sphere检测

今天超级简单!判断两个球相交不相交,直接判断两个球心的距离是否大于两个半径的和就可以了。检测代码public static bool IntersectSphereSphere(Sphere sphere0, Sphere sphere1) { Vector3 delta = sphere0.center - sphere1.center;

爱冒险的技术宅 3247

桌面运维工程师面试题汇总(高频完整版)

岗位,覆盖:电脑硬件、系统安装与故障、网络、办公软件、安全、AD域、打印机、日常排错、服务意识。

老韩的Linux云计算架构师进阶之路 909

108、AWB 时间滤波器:帧间白平衡平滑,防止色彩跳变与过冲

摘要: 文章探讨了AWB(自动白平衡)时间滤波器的设计与优化,以解决帧间白平衡跳变和过冲问题。通过自适应状态机(STABLE/TRANSITION/JUMP)动态调整平滑系数alpha,结合帧率归一化和过冲保护(方向检测+限幅),实现场景切换快速响应与静态稳定性的平衡。作者分享了工程经验:避免固定阈值、联动AE/AF、真实场景验证,并推荐简化卡尔曼滤波替代IIR。最终方案在旗舰机前置摄像头中成功消除“闪白”现象,强调参数需动态适应光照与色温变化。

sundong_81的博客 63

碰撞检测之Ray-Sphere检测

最近要开一个物理相关的系列,首先整理总结一下去年写的一些东西,然后看能不能撸一个物理引擎出来。 射线检测在之前写光线追踪的时候有写过一些,但当时写得都比较简单,恰好最近工作上又要用到这些,所以就好好来写写。

爱冒险的技术宅 4606

yandex 不定长旋转验证码PPOCR识别案例

可以看到,此种验证码非常变态,旋转角度不固定,干扰背景不固定,字符长度不固定,弯曲形变都是不固定的,在人眼都很难分辨验证码的情况下,其实都是对于模型来讲,也是比较困难的哈哈,传统验证码可能小几百张就能达到很好的效果了,是因为,验证码难度比较简单,通常都是4,6位定长,但是对于模型而言,无非就是增加数据量。由于该验证码的复杂度,自己写一个rcnn或者其他模型,来优化改数据集进行训练变的尤为困难复杂,所以这里强烈推荐百度飞桨的开源模型。在得到较好的loss后,导出模型。如有侵犯,请联系作者下架。

码王吴彦祖的博客 723

训练实录 | 2021牛客暑期多校训练营2

2021牛客暑期多校训练营2 传送门 C - Draw Grids solved by oye. (00:22:07) 题意: #include<iostream> #include<string.h> #include<queue> #include<stack> #include<math.h> #include<map> #include<set> #include<algorithm> #include

m0_60243915的博客 219

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

2021牛客暑期多校训练营2-F:Girlfriend

题目链接 题意:给定A,B,C,D,四个点和系数K1,K2,集合X中的点满足|A-X|>=K1|B-X|,集合Y中的点满足|C-Y|>=K2|D-Y|,求集合Z=X∩Y的大小 大学狗先梦回高中求下几何: 我们现在二维平面下求下形状 先从网上盗了个图,将就看下一: 前提条件 PA/PB=K PM为∠APB的角平分线,有角平分线定理可得PA/PB=AM/MB PN为∠APB外角的角平分线,我们过B点做一条直线PM平行线交AP于E,使得BE//PN 证明: ∵PN//BE,PM为∠APB外角的角平分

donnameの博客 156

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

2021牛客暑期多校训练营2 F-Girlfriend

#include<bits/stdc++.h> using namespace std; const double pai=acos(-1); int x[5],y[5],z[5],k[5];//A,B,C,D各自的x,y,z double xx[5],yy[5],zz[5],r[5];//两个球各自的x,y,z和各自的半径r void get()//计算两个球的数据 { int i,j,tot; double kk,sum; for(i=1;i<=2;i++) { to

weixin_49636856的博客 183

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

2021牛客暑期多校训练营2 F Girlfriend (阿波罗尼斯圆+简单几何)

F Girlfriend (阿波罗尼斯球+简单几何) 题目大意: 给定四个点,每两个点构成一个阿波罗尼斯球,求两圆相交部分的体积。 思路: 一看就是几何题啊,话不多说直接开淦。。。 首先对于阿波罗尼斯球的性质得到∣PA∣==K∗∣PB∣|PA| == K*|PB|∣PA∣==K∗∣PB∣ 假设A(x0,y0,z0)A(x_0,y_0,z_0)A(x0​,y0​,z0​),B(x1,y1,z1)B(x_1,y_1,z_1)B(x1​,y1​,z1​)那么我们有: (x−x0)2+(y−y0)2+(z−z0)2

lucifer1214的博客 430

2021牛客暑期多校训练营2 Girlfriend(阿波罗尼斯圆 + 计算几何)

题意 空间里有6个点,满足∣P1A∣⩾k1∣P1B∣\left | P_1A \right | \geqslant k_1\left | P_1B \right |∣P1​A∣⩾k1​∣P1​B∣,∣P2C∣⩾k2∣P2D∣\left | P_2C \right | \geqslant k_2\left | P_2D \right |∣P2​C∣⩾k2​∣P2​D∣,求P1,P2各自的轨迹相交部分的体积; 思路 对于固定的k,P1,P2的轨迹构成标准的阿波罗尼斯球壳; 同时,题意的k >= 1,可以得

hz0010的博客 372

2021牛客暑期多校训练营2

2021牛客暑期多校训练营2 Draw Grids #include <iostream> using namespace std; int n, m; int main() { cin >> n >> m; if (n*m%2==1) cout<<"NO\n"; else cout<<"YES\n"; return 0; } Er Ba Game #include <bits/stdc++.h> us

m0_51344983的博客 314

2021暑期多校训练营2_acm_补题(未完)

2021暑期多校训练营2_acm_补题 C Draw Grids 题目入口 思路 这道题目数据量也很少,其实我们通过画图就能很容易得出其规律,最后得出结论就是行和列都是奇数时会输,否则就会赢。其实我们要做的就是在这个图上画一个生成树,看看谁走最后一步。 附上代码 #include <bits/stdc++.h> using namespace std; int n,m; int main() { scanf("%d%d",&n,&m); if((n%2)&am

飞向更远的博客 132

数学专题训练6 计算几何

【代码】数学专题训练6 计算几何。

qq_45812711的博客 337

空间直线与球面相交算法

详细介绍了空间直线与球面相交的C/C++实现。

Charlee44的技术驿站 7010

【2021牛客多校2】F-Girlfriend 计算几何

题号 [题目] (链接把前面空格删掉) 题目大意 Time : 1000 ms Memory: 262144 kB 解题思路及分析 AC代码

CapriceH的博客 490

Imprecise Computer - ( 思维 / 递推 )

题目描述 The Imprecise Computer (IC) is a computer with some structural issue that it can compare two integers correctly only when their difference is at least two. For example, IC can always correctly answer ‘4 is larger than 2’, but it can answer either ‘2 i

Cosmic_Tree的博客 1528

Going Home - ( 抽屉原理 )

题目链接:点击进入 题目 题意 给一个长度为 n 的数组,问是否存在 x , y , z , w ( 四个数互不相同 ) ,满足 a [ x ] + a [ y ] = a [ z ] + a [ w ] ; 思路 暴力枚举 x 与 y ,得出和值 C ,2 <= C <= 5e6。 有 n ^ 2 对( x , y ),和值 C 大约有 5e6 种取值,当 n ^ 2 > 5e6 时,根据抽屉原理,必有一个和值对应两个以上的( x , y )对,但是,此时可能对应的( x , y )

Cosmic_Tree的博客 1407

ABC Conjecture(大数分解)-2020ccpc(威海)

题意 给你一个范围是 [ 1 , 10 ^ ​18​​ ] 的数,让你求这个数能不能被一个 素数的平方 整除(即 c % ( i * i ) == 0) 思路1 用大数分解模板,将 c 分解得到 c 的所有质因子,然后去重(模板得到的是无序且没去重的),然后将所有质因子相乘,得到 tmp , 如果 tmp 跟 c 相等,说明 c 不能被素数的平方整除,否则可以。 (记得特判 c == 1 的情况!!! c = 1 是 “ no ” ) 代码1 #include<iostream> #incl..

Cosmic_Tree的博客 1335
上一篇: 牛客练习赛83 - 计算几何( 数位dp )
下一篇: 求组合数的几种方法
Cosmic_Tree
博客等级 码龄7年 134粉丝 337原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值