简单的三角函数问题
已知黑色点1,点2坐标,从点1到点2画了一条直线,点2到红色两个点的连线与已知线段夹角都是45度,点2到红色两点长度为10个像素,求红色两点中任一个坐标。
[解决办法]
你想画箭头?去找个画箭头的算法,一大把,可以任意角度。
[解决办法]
- C# code
public var Radius:int=6; public var LineColor:uint=0x000000; private function GetAngle(startX:Number,startY:Number,endX:Number,endY:Number):int { var tmpx:int=endX-startX ; var tmpy:int=startY -endY ; var angle:int= Math.atan2(tmpy,tmpx)*(180/Math.PI); return angle; } private function drawArrow(startX:Number,startY:Number,endX:Number,endY:Number):void{ var angle:int= GetAngle(startX,startY,endX,endY); var centerX:int=endX-Radius * Math.cos(angle *(Math.PI/180)) ; var centerY:int=endY+Radius * Math.sin(angle *(Math.PI/180)) ; var topX:int=endX ; var topY:int=endY ; var leftX:int=centerX + Radius * Math.cos((angle +120) *(Math.PI/180)) ; var leftY:int=centerY - Radius * Math.sin((angle +120) *(Math.PI/180)) ; var rightX:int=centerX + Radius * Math.cos((angle +240) *(Math.PI/180)) ; var rightY:int=centerY - Radius * Math.sin((angle +240) *(Math.PI/180)) ; s.graphics.beginFill(LineColor,1); s.graphics.lineStyle(1,LineColor,1); s.graphics.moveTo(topX,topY); s.graphics.lineTo(leftX,leftY); s.graphics.lineTo(centerX,centerY); s.graphics.lineTo(rightX,rightY); s.graphics.lineTo(topX,topY); s.graphics.endFill(); }
[解决办法]
- C/C++ code
dx=x2-x1;dy=y2-y1;d=sqrt(dx*dx+dy*dy);sqrt2=sqrt(2);x3=x2-dx*10/d/sqrt2+dy*10/d/sqrt2;y3=y2-dy*10/d/sqrt2-dx*10/d/sqrt2;x4=x2-dx*10/d/sqrt2-dy*10/d/sqrt2;y4=y2-dy*10/d/sqrt2+dx*10/d/sqrt2;