【三分】HDU3756 Dome of Circus

本文探讨了利用三分法优化圆锥体积计算的过程,通过枚举半径并计算包含每个点的圆锥最小高度,从而找到最大体积对应的半径。重点介绍了初始半径范围的设定以及输入输出部分如何避免cin和cout导致的超时问题,采用printf和scanf进行高效IO操作。
  • 假设我们枚举一个半径r,那么分别考虑包含进每个点圆锥的最小高度h0,h1,,hn1,显然此时如果半径为r,圆锥高度应为maxn1i=0 hi,简单推算一下公式,可以发现体积关于半径是个凹函数,于是三分半径即可。
  • 注意初始的半径范围,上限自然可以随便设置一个较大值,但下限需要稍加考虑。设
    di=xi2+yi2
    那么r应满足
    r>max{di},0i<n
  • 输入输出部分,即使ios::sync_with_stdio(false)也无法避免cincout的超时问题,所以似乎必须用printfscanfIO
/* **********************************************

    File Name: 3756.cpp

    Auther: zhengdongjian@tju.edu.cn

    Created Time: 2015/9/9 星期三 下午 7:07:06

*********************************************** */
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef pair<int, int> P;
const double EPS = 1e-4;
const double INF = (double)INT_MAX;
const int MAX = 10007;
struct Pos {
    double x, y, z;
} a[MAX];
int n;

istream& operator>>(istream& in, Pos& p) {
    in >> p.x >> p.y >> p.z;
    return in;
}

pair<double, double> gao(double r) {
    double h = 0.0;
    for (int i = 0; i < n; ++i) {
        double dis = a[i].x * a[i].x + a[i].y * a[i].y;
        dis = sqrt(dis);
        //printf("dis = %f\n", dis);
        //getchar();
        double tp = a[i].z / (r - dis) * dis + a[i].z;
        if (tp > h) h = tp;
    }
    return make_pair(h, r * r * h);
}

pair<double, double> cut(double le, double ri) {
    double md, mdmd;
    while (ri - le > EPS) {
        //printf("le = %f, ri = %f\n", le, ri);
        md = (le + ri) * 0.5;
        mdmd = (md + ri) * 0.5;
        if (gao(mdmd).second > gao(md).second) {
            ri = mdmd;
        } else {
            le = md;
        }
    }
    //printf("le = %f, ri = %f\n", le, ri);
    return make_pair(gao(le).first, le);
}

int main() {
    int T;
    scanf(" %d", &T);
    while (T--) {
        scanf(" %d", &n);
        double mindis = 0.0;
        for (int i = 0; i < n; ++i) {
            scanf(" %lf %lf %lf", &a[i].x, &a[i].y, &a[i].z);
            mindis = min(mindis, sqrt(a[i].x * a[i].x + a[i].y * a[i].y));
        }
        //auto res = make_pair(0.0, 0.0);
        auto res = cut(mindis + EPS, 100000.0);
        printf("%.3f %.3f\n", res.first + EPS, res.second + EPS);
    }
    return 0;
}
【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,并提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的优势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性与收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领域的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领域的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式优化、协同控制等课题提供算法设计与仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑与系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发与性能优化。
【四旋翼无人机】具备螺旋桨倾斜机构的全驱动四旋翼无人机:建模与控制研究(Matlab代码、Simulink仿真实现)内容概要:本文围绕具备螺旋桨倾斜机构的全驱动四旋翼无人机展开,重点研究其动力学建模与控制系统设计。通过Matlab代码与Simulink仿真实现,详细阐述了该类无人机的运动学与动力学模型构建过程,分析了螺旋桨倾斜机构如何提升无人机的全向机动能力与姿态控制性能,并设计相应的控制策略以实现稳定飞行与精确轨迹跟踪。文中涵盖了从系统建模、控制器设计到仿真验证的完整流程,突出了全驱动结构相较于传统四旋翼在欠驱动问题上的优势。; 适合人群:具备一定控制理论基础和Matlab/Simulink使用经验的自动化、航空航天及相关专业的研究生、科研人员或无人机开发工程师。; 使用场景及目标:①学习全驱动四旋翼无人机的动力学建模方法;②掌握基于Matlab/Simulink的无人机控制系统设计与仿真技术;③深入理解螺旋桨倾斜机构对飞行性能的影响及其控制实现;④为相关课题研究或工程开发提供可复现的技术参考与代码支持。; 阅读建议:建议读者结合提供的Matlab代码与Simulink模型,逐步跟进文档中的建模与控制设计步骤,动手实践仿真过程,以加深对全驱动无人机控制原理的理解,并可根据实际需求对模型与控制器进行修改与优化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值