几何


//向量积 n=a×b ,用矩阵的方法实现,n与ab两个向量都垂直,三角形ABC的面积= 0.5*abs(a×b)=0.5×abs(b×c)=0.5*abs(c×a)  

//a=(xa,ya,za)  b=(xb,yb,zb)

n=a×b=(yazb-ybza,xbza-xazb,xayb

//向量(x,y)绕原点旋转X弧度(度 )

#include <iostream>
#include <stdio.h>
#include <math.h>
#define pi acos(-1)//
using namespace std;

int main(){
    double x,y,x1,y1;
    double len;
    double t,k;//
    scanf("%lf%lf",&x,&y);
    len=sqrt(x*x+y*y);
    t=acos(x/len);
    t=y>0?t:(2*pi-t);
    scanf("%lf",&k);
    k=k/180*pi;
    t+=k;
    x1=len*cos(t);
    y1=len*sin(t);
    printf("%lf %lf\n",x1,y1);
}

 

// 已知两点生成 线段或者直线 已知点a(x1,y1),b(x2,y2)

(x1-x2)*(y-y2)-(y1-y2)*(x-x2)=0

//点到直线的距离

d=abs((x1-x2)*(y-y2)-(y1-y2)*(x-x2))/sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

//点到直线的垂足并 设直线为 AX+BY+C=0 点为 (X1,Y1),垂足为(X2,Y2)

X2=(B*B*X1-A*B*Y1-AC)/(A*A+B*B)
Y2=(A*A*Y1-A*B*X1-BC)/(A*A+B*B)

 

//判断点是否在多边形内
//从该点做一条水平向右的射线如与多边形相交奇数次则 在内,偶数此则在外,不考虑边界

 

#include <stdio.h>
int n,a[100][2];
int judge(int x,int y){
    int n=0,x1,x2,y1,y2;
    for(i=0;i<n;i++){
        x1=a[i][0];y1=a[i][1];
        x2=a[(i+1)%n][0];y2=a[(i+1)%n][1];
        if(x1==x2){
            if(x1==x && (y>y1 && y<y2) || (y>y2 &&y<y1))
                n++;
        }
        else{
            if(y>(x-x2)*(y1-y2)/(x1-x2)+y2)
                n++;
        }
    }
    if(n%2==0)
        return 0;
    else
        return 1;//在内部
}

 

posted on 2016-03-05 15:21  猪是的念来过倒  阅读(276)  评论(0编辑  收藏  举报