c语言程序设计,输入一个点的坐标,输出沿原点逆时针旋转90度得到的坐标

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言程序设计,输入一个点的坐标,输出沿原点逆时针旋转90度得到的坐标相关的知识,希望对你有一定的参考价值。

c语言程序设计,输入一个点的坐标,输出沿原点逆时针旋转90度得到的坐标是c语言程序设计

参考技术A 坐标(x, y)沿原点逆时针旋转90°后不就是(-y, x)吗追问

我知道,但是在c语言里直接这样编写可以吗

本回答被提问者采纳
参考技术B #include <stdio.h>
int main()
double x,y;
 scanf("%lf%lf",&x,&y);
 printf("%lg %lg\\n",-y,x);
 return 0;

参考技术C 百度旋转矩阵,具体的公式函数忘了。。。

bzoj5008: 方师傅的房子

Description

方师傅来到了一个二维平面。他站在原点上,觉得这里风景不错,就建了一个房子。这个房子是n个点的凸多边形
,原点一定严格在凸多边形内部。有m个人也到了这个二维平面。现在你得到了m个人的坐标,你要判断这m个人中
有多少人在房子内部。点在凸多边形边上或者内部都认为在房子里面。

Input

第一行一个数n,接下来n行,每行两个整数x,y。输入按照逆时针顺序输入一个凸包。  
接下来一个数m,最后有m行,第一行两个整数 x,y,表示第一个人的坐标。
对于第i个询问(i>=2) ,输入两个数dx,dy。
如果上一个人在房子内部,x[i]=x[i-1]+dx,y[i]=y[i-1]+dy。否则x[i]=x[i-1]-dx,y[i]=y[i-1]-dy。
n <= 100000, m <= 200000,输入保证所有人的坐标,房屋的坐标都在[-1e9,1e9]之内。

Output

输出一个数,在房子内部人的个数。

对每个询问,二分出凸包上对应位置进行判断,二分时可以用极角,当极角相近时换用叉积以减小误差。

#include<bits/stdc++.h>
typedef long long i64;
char buf[10000007],*ptr=buf;
int _(){
    int x=0,f=1;
    while(*ptr<48)*ptr++==-?f=-1:0;
    while(*ptr>47)x=x*10+*ptr++-48;
    return x*f;
}
int n,m,ans=0;
double a0;
const double _2pi=std::acos(-1)*2;
struct pos{
    int x,y;
    double a;
    void ga(){
        a=std::atan2(y,x)-a0;
        while(a<0)a+=_2pi;
        while(a>=_2pi)a-=_2pi;
    }
    bool operator<(const pos&w)const{
        if(fabs(a-w.a)>1e-6)return a<w.a;
        return *this*w>0;
    }
    i64 operator*(const pos&w)const{return i64(x)*w.y-i64(y)*w.x;}
    pos operator-(const pos&w)const{return (pos){x-w.x,y-w.y};}
}ps[100007];
int query(pos p){
    p.ga();
    pos*p1=std::upper_bound(ps+1,ps+n+1,p);
    if((p1[-1]-p)*(p1[0]-p)>=0)return ++ans,1;
    return -1;
}
int main(){
    fread(buf,1,sizeof(buf),stdin);
    n=_();
    for(int i=1;i<=n;++i)ps[i].x=_(),ps[i].y=_();
    a0=std::atan2(ps[1].y,ps[1].x);
    ps[1].a=0;
    for(int i=2;i<=n;++i)ps[i].ga();
    ps[n+1]=ps[1];
    m=_();
    int x0=_(),y0=_();
    for(int i=2,la=query((pos){x0,y0});i<=m;++i){
        x0+=_()*la,y0+=_()*la;
        la=query((pos){x0,y0});
    }
    printf("%d\n",ans);
    return 0;
}

 

以上是关于c语言程序设计,输入一个点的坐标,输出沿原点逆时针旋转90度得到的坐标的主要内容,如果未能解决你的问题,请参考以下文章

坐标轴上所有点的坐标用c语言怎么求

数学中一个点在直角坐标系中绕原点旋转90或180度后的坐标怎么求?

输入一个点坐标(两个浮点数),输出其到坐标原点的距离(保留2位有效数字)

两个平行的坐标系点的坐标有啥规律

c语言编写点到原点的距离以及与x轴正方向的角度

C语言,二维点按照x坐标大小排序题。