2011-0038

从 Trac 迁移的文章

这是从旧校内 Wiki 迁移的文章,可能存在一些样式问题,您可以向 memset0 反馈。

原文章内容如下:

此题给出三角形OAB一个顶点O(0,0),边OA的长度r,垂心H(h,0),OA和OH的夹角a的范围[a1,a2],求B点在其y坐标最大时的坐标。 h<=r;

补充一点,此题默认A点在第一象限,即A点坐标仅为(r cos a, r sin a),因为没有图示,在forum询问了才得知。

根据垂心的性质,OH垂直AB,BH垂直OA, 所以可得B点 (r cos a,y),且向量OA和BH内积为0.

(r cos a, r sin a)(h-r cos a, -y)=0;

得y=(h-r cos a)/tan(a)

dy/da=(csc(a) + cos(a)) * r - h*csc^2^ a 

d^2^y/da^2^ = -0.125 csc^3^ a * r * ((cos(4a) + 15) - 16(h/r)*cos a)<= 0

所以y 关于a 是单峰函数,y的最大值可用三分法求得

{{{
#include<cmath>
#include<cstdio>
double maxx,maxy,h,r;
inline double solve(double a){
    double x,y;
    x=r*cos(a);
    y=(h-x)/tan(a);
    if(y>maxy){
        maxy=y;
        maxx=x;
    }
    return y;
}
int main(){
    double a1,a2,m1,m2;
    while(scanf("%lf%lf%lf%lf",&h,&r,&a1,&a2)==4){
        maxy=-1e100;
        solve(a1);solve(a2);
        int xxxxx=100;
        while(xxxxx--){
            m1=(a1*2+a2)/3;
            m2=(a1+a2*2)/3;
            if(solve(m1)<solve(m2))a1=m1;else a2=m2;
        }
        printf("%.3lf %.3lf\n",maxx,maxy);
    }
    return 0;
}
}}}
occupied by ZhouYuChen

此题给出三角形OAB一个顶点O(0,0),边OA的长度r,垂心H(h,0),OA和OH的夹角a的范围[a1,a2],求B点在其y坐标最大时的坐标。 h<=r;

补充一点,此题默认A点在第一象限,即A点坐标仅为(r cos a, r sin a),因为没有图示,在forum询问了才得知。

根据垂心的性质,OH垂直AB,BH垂直OA, 所以可得B点 (r cos a,y),且向量OA和BH内积为0.

(r cos a, r sin a)(h-r cos a, -y)=0;

得y=(h-r cos a)/tan(a)

dy/da=(csc(a) + cos(a)) * r - h*csc2 a

d2y/da2 = -0.125 csc3 a * r * ((cos(4a) + 15) - 16(h/r)*cos a)<= 0

所以y 关于a 是单峰函数,y的最大值可用三分法求得

#include<cmath>
#include<cstdio>
double maxx,maxy,h,r;
inline double solve(double a){
    double x,y;
    x=r*cos(a);
    y=(h-x)/tan(a);
    if(y>maxy){
        maxy=y;
        maxx=x;
    }
    return y;
}
int main(){
    double a1,a2,m1,m2;
    while(scanf("%lf%lf%lf%lf",&h,&r,&a1,&a2)==4){
        maxy=-1e100;
        solve(a1);solve(a2);
        int xxxxx=100;
        while(xxxxx--){
            m1=(a1*2+a2)/3;
            m2=(a1+a2*2)/3;
            if(solve(m1)<solve(m2))a1=m1;else a2=m2;
        }
        printf("%.3lf %.3lf\n",maxx,maxy);
    }
    return 0;
}

occupied by ZhouYuChen