c# 绘制正负坐标轴,代码怎么编写?最好详细点
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 绘制正负坐标轴,代码怎么编写?最好详细点相关的知识,希望对你有一定的参考价值。
代码是数控程序中的指令。一般都称为G指令。代码名称-功能简述
G00------快速定位
G01------直线插补
G02------顺时针方向圆弧插补
G03------逆时针方向圆弧插补
G04------定时暂停
G05------通过中间点圆弧插补
G07------Z 样条曲线插补
G08------进给加速
G09------进给减速
G20------子程序调用
G22------半径尺寸编程方式
G220-----系统操作界面上使用
G23------直径尺寸编程方式
G230-----系统操作界面上使用
G24------子程序结束
G25------跳转加工
G26------循环加工
G30------倍率注销
G31------倍率定义
G32------等螺距螺纹切削,英制
G33------等螺距螺纹切削,公制
G53,G500-设定工件坐标系注销
G54------设定工件坐标系一
G55------设定工件坐标系二
G56------设定工件坐标系三
G57------设定工件坐标系四
G58------设定工件坐标系五
G59------设定工件坐标系六
G60------准确路径方式
G64------连续路径方式
G70------英制尺寸 寸
G71------公制尺寸 毫米
G74------回参考点(机床零点)
G75------返回编程坐标零点
G76------返回编程坐标起始点
G81------外圆固定循环
G331-----螺纹固定循环
G90------绝对尺寸
G91------相对尺寸
G92------预制坐标
G94------进给率,每分钟进给
G95------进给率,每转进给
G00—快速定位
格式:G00 X(U)__Z(W)__
说明:(1)该指令使刀具按照点位控制方式快速移动到指定位置。移动过程中不得对工件
进行加工。
(2)所有编程轴同时以参数所定义的速度移动,当某轴走完编程值便停止,而其他
轴继续运动,
(3)不运动的坐标无须编程。
(4)G00可以写成G0
例:G00 X75 Z200
G0 U-25 W-100
先是X和Z同时走25快速到A点,接着Z向再走75快速到B点。
G01—直线插补
格式:G01 X(U)__Z(W)__F__(mm/min)
说明:(1)该指令使刀具按照直线插补方式移动到指定位置。移动速度是由F指令
进给速度。所有的坐标都可以联动运行。
(2)G01也可以写成G1
例:G01 X40 Z20 F150
两轴联动从A点到B点
G02—逆圆插补
格式1:G02 X(u)____Z(w)____I____K____F_____
说明:(1)X、Z在G90时,圆弧终点坐标是相对编程零点的绝对坐标值。在G91时,
圆弧终点是相对圆弧起点的增量值。无论G90,G91时,I和K均是圆弧终点的坐标值。
I是X方向值、K是Z方向值。圆心坐标在圆弧插补时不得省略,除非用其他格式编程。
(2)G02指令编程时,可以直接编过象限圆,整圆等。
注:过象限时,会自动进行间隙补偿,如果参数区末输入间隙补偿与机床实际反向间隙
悬殊,都会在工件上产生明显的切痕。
(3)G02也可以写成G2。
例:G02 X60 Z50 I40 K0 F120
格式2:G02 X(u)____Z(w)____R(+\-)__F__
说明:(1)不能用于整圆的编程
(2)R为工件单边R弧的半径。R为带符号,“+”表示圆弧角小于180度;
“-”表示圆弧角大于180度。其中“+”可以省略。
(3)它以终点点坐标为准,当终点与起点的长度值大于2R时,则以直线代替圆弧。
例:G02 X60 Z50 R20 F120
格式3:G02 X(u)____Z(w)____CR=__(半径)F__
格式4:G02 X(u)____Z(w)__D__(直径)F___
这两种编程格式基本上与格式2相同
G03—顺圆插补
说明:除了圆弧旋转方向相反外,格式与G02指令相同。
G04—定时暂停
格式:G04__F__ 或G04 __K__
说明:加工运动暂停,时间到后,继续加工。暂停时间由F后面的数据指定。单位是秒。
范围是0.01秒到300秒。
G05—经过中间点圆弧插补
格式:G05 X(u)____Z(w)____IX_____IZ_____F_____
说明:(1)X,Z为终点坐标值,IX,IZ为中间点坐标值。其它与G02/G03相似
例: G05 X60 Z50 IX50 IZ60 F120
G08/G09—进给加速/减速
格式:G08
说明:它们在程序段中独自占一行,在程序中运行到这一段时,进给速度将增加10%,
如要增加20%则需要写成单独的两段。
G22(G220)—半径尺寸编程方式
格式:G22
说明:在程序中独自占一行,则系统以半径方式运行,程序中下面的数值也是
以半径为准的。
G23(G230)—直径尺寸编程方式
格式:G23
说明:在程序中独自占一行,则系统以直径方式运行,程序中下面的数值也是
以直径为准的。
G25—跳转加工
格式:G25 LXXX
说明: 当程序执行到这段程序时,就转移它指定的程序段。(XXX为程序段号)。
G26—循环加工
格式:G26 LXXX QXX
说明:当程序执行到这段程序时,它指定的程序段开始到本 段作为一个循环体,
循环次数由Q后面的数值决定。
G30—倍率注销
格式:G30
说明:在程序中独自占一行,与G31配合使用,注销G31的功能。
G31—倍率定义
格 式:G31 F_____
G32—等螺距螺纹加工(英制)
G33—等螺距螺纹加工(公制)
格式:G32/G33 X(u)____Z(w)____F____
说明:(1)X、Z为终点坐标值,F为螺距
(2)G33/G32只能加工单刀、单头螺纹。
(3)X值的变化,能加工锥螺纹
(4)使用该指令时,主轴的转速不能太高,否则刀具磨损较大。
G54—设定工件坐标一
格式:G54
说明:在系统中可以有几个坐标系,G54对应于第一个坐标系,其原点位置数值在机床
参数中设定。
G55—设定工件坐标二
同上
G56—设定工件坐标三
同上
G57—设定工件坐标四
同上
G58—设定工件坐标五
同上
G59—设定工件坐标六
同上
G60—准确路径方式
格式:G60
说明:在实际加工过程中,几个动作连在一起时,用准确路径编程时,那么在进行
下一 段加工时,将会有个缓冲过程(意即减速)
G64—连续路径方式
格式:G64
说明:相对G60而言。主要用于粗加工。
G74—回参考点(机床零点)
格式:G74 X Z
说明:(1)本段中不得出现其他内容。
(2)G74后面出现的的座标将以X、Z依次回零。
(3)使用G74前必须确认机床装配了参考点开关。
(4)也可以进行单轴回零。
G75—返回编程坐标零点
格式:G75 X Z
说明:返回编程坐标零点
G76—返回编程坐标起始点
格式:G76
说明:返回到刀具开始加工的位置。
G81—外圆(内圆)固定循环
格式:G81__X(U)__Z(W)__R__I__K__F__
说明:(1)X,Z为终点坐标值,U,W为终点相对 于当前点的增量值 。
(2)R为起点截面的要加工的直径。
(3)I为粗车进给,K为精车进给,I、K为有符号数,并且两者的符号应相同。
符号约定如下:由外向中心轴切削(车外圆 )为“—”,反这为“+”。
(4)不同的X,Z,R 决定外圆不同的开关,如:有锥度或没有度,
正向锥度或反向锥度,左切削或右切削等。
(5)F为切削加工的速度(mm/min)
(6)加工结束后,刀具停止在终点上。
例:G81 X40 Z 100 R15 I-3 K-1 F100
加工过程:
1:G01进刀2倍的I(第一刀为I,最后一刀为I+K精车),进行深度切削:
2:G01两轴插补,切削至终点截面,如果加工结束则停止:
3:G01退刀I到安全位置,同时进行辅助切面光滑处理
4:G00快速进刀到高工面I外,预留I进行下一 步切削加工 ,重复至1。
G90—绝对值方式编程
格式:G90
说明:(1)G90编入程序时,以后所有编入的坐标值全部是以编程零点为基准的。
(2)系统上电后,机床处在G状态。
N0010 G90 G92 x20 z90
N0020 G01 X40 Z80 F100
N0030 G03 X60 Z50 I0 K-10
N0040 M02
G91—增量方式编程
格式:G91
说明:G91编入程序时,之后所有坐标值均以前一个坐标位置作为起点来计算
运动的编程值。在下一段坐标系中,始终以前一点作为起始点来编程。
例: N0010 G91 G92 X20 Z85
N0020 G01 X20 Z-10 F100
N0030 Z-20
N0040 X20 Z-15
N0050 M02
G92—设定工件坐标系
格式:G92 X__ Z__
说明:(1)G92只改变系统当前显示的坐标值,不移动坐标轴,达到设定坐标
原点的目的。
(2)G92的效果是将显示的刀尖坐标改成设定值 。
(3)G92后面的XZ可分别编入,也可全 编。
G94—进给率,每分钟进给
说明:这是机床的开机默认状态。
G20—子程序调用
格式:G20 L__
N__
说明:(1)L后为要调用的子程序N后的程序名,但不能把N输入。
N后面只允许带数字1~99999999。
(2)本段程序不得出现以上描述以外的内容。
G24—子程序结束返回
格式:G24
说明:(1)G24表示子程序结束,返回到调用该子程序程序的下一段。
(2)G24与G20成对出现
(3)G24本段不允许有其它指令出现。
例:通过下例说明在子程序调用过程中参数的传递过程,请注意应用
程序名:P10
M03 S1000
G20 L200
M02
N200 G92 X50 Z100
G01 X40 F100
Z97
G02 Z92 X50 I10 K0 F100
G01 Z-25 F100
G00 X60
Z100
G24
如果要多次调用,请按如下格式使用
M03 S1000
N100 G20 L200
N101 G20 L200
N105 G20 L200
M02
N200 G92 X50 Z100
G01 X40 F100
Z97
G02 Z92 X50 I10 K0 F100
G01 Z-25 F100
G00 X60
Z100
G24
G331—螺纹加工循环
格式:G331 X__ Z__I__K__R__p__
说明:(1)X向直径变化,X=0是直螺纹
(2)Z是螺纹长度,绝对或相对编程均可
(3)I是螺纹切完后在X方向的退尾长度,±值
(4)R螺纹外径与根径的直径差,正值
(5)K螺距KMM
(6)p螺纹的循环加工次数,即分几刀切完
提示:
1、每次进刀深度为R÷p并取整,最后一刀不进刀来光整螺纹面
2、内螺纹退尾根据沿X的正负方向决定I值的称号。
3、螺纹加工循环的起始位置为将刀尖对准螺纹的外圆处。
例子:
M3
G4 f2
G0 x30 z0
G331 z-50 x0 i10 k2 r1.5 p5
G0 z0
M05
补充一下:
1、G00与G01
G00运动轨迹有直线和折线两种,该指令只是用于点定位,不能用于切削加工
G01按指定进给速度以直线运动方式运动到指令指定的目标点,一般用于切削加工
2、G02与G03
G02:顺时针圆弧插补 G03:逆时针圆弧插补
3、G04(延时或暂停指令)
一般用于正反转切换、加工盲孔、阶梯孔、车削切槽
4、G17、G18、G19 平面选择指令,指定平面加工,一般用于铣床和加工中心
G17:X-Y平面,可省略,也可以是与X-Y平面相平行的平面
G18:X-Z平面或与之平行的平面,数控车床中只有X-Z平面,不用专门指定
G19:Y-Z平面或与之平行的平面
5、G27、G28、G29 参考点指令
G27:返回参考点,检查、确认参考点位置
G28:自动返回参考点(经过中间点)
G29:从参考点返回,与G28配合使用
6、G40、G41、G42 半径补偿
G40:取消刀具半径补偿
先给这么多,晚上整理好了再给
7、G43、G44、G49 长度补偿
G43:长度正补偿 G44:长度负补偿 G49:取消刀具长度补偿
8、G32、G92、G76
G32:螺纹切削 G92:螺纹切削固定循环 G76:螺纹切削复合循环
9、车削加工:G70、G71、72、G73
G71:轴向粗车复合循环指令 G70:精加工复合循环 G72:端面车削,径向粗车循环 G73:仿形粗车循环
10、铣床、加工中心:
G73:高速深孔啄钻 G83:深孔啄钻 G81:钻孔循环 G82:深孔钻削循环
G74:左旋螺纹加工 G84:右旋螺纹加工 G76:精镗孔循环 G86:镗孔加工循环
G85:铰孔 G80:取消循环指令
11、编程方式 G90、G91
G90:绝对坐标编程 G91:增量坐标编程
12、主轴设定指令
G50:主轴最高转速的设定 G96:恒线速度控制 G97:主轴转速控制(取消恒线速度控制指令) G99:返回到R点(中间孔) G98:返回到参考点(最后孔)
13、主轴正反转停止指令 M03、M04、M05
M03:主轴正传 M04:主轴反转 M05:主轴停止
14、切削液开关 M07、M08、M09
M07:雾状切削液开 M08:液状切削液开 M09:切削液关
15、运动停止 M00、M01、M02、M30
M00:程序暂停 M01:计划停止 M02:机床复位 M30:程序结束,指针返回到开头
16、M98:调用子程序
17、M99:返回主程序
x y z 圆弧中点实际坐标值
i j k 圆心起点到圆心的矢量 在xy上面的分量
i或ijk 表示圆弧的半径
r 和 ijk 同时出现的时候r有效 圆弧所对的圆心角小于180度时 r为正 大于180度时 r为负
--------------------------------------
一下子举例常用的我也说不清 看做什么的、
上面很全了 、都在里面了
参考技术A 自己以前写的一个 不知能不能帮助到你,当时也是第一次接触,看了写书籍。
public void ShowPic(string _biaozhun, string _zuizhong)
//实例化一个新画布
Bitmap bitM = new Bitmap(this.panel1.Width, this.panel1.Height);//340,160
Graphics grap = Graphics.FromImage(bitM);
grap.Clear(Color.White);//清空背景色
for (int i = 0; i < 9; i++)
//x1,y1为起点坐标,x2,y2为终点坐标
grap.DrawLine(new Pen(new SolidBrush(Color.Red), 1.0f), 50, panel1.Height - 20 - i * 15, panel1.Width - 40, panel1.Height - 20 - i * 15);
grap.DrawString(Convert.ToString(i), new Font("Times New Roman", 10, FontStyle.Regular), new SolidBrush(Color.Black), 20, panel1.Height - 27 - i * 15);
string[] m = "标准" + _biaozhun, "最终" + _zuizhong ;
for (int j = 0; j < 2; j++)
if (j == 0)
grap.DrawLine(new Pen(new SolidBrush(Color.Red), 1.0f), 50 + 40 * j, panel1.Height - 20, 50 + 40 * j, 20);
else
//grap.DrawLine(new Pen(new SolidBrush(Color.Red), 1.0f), 50 + 40 * j, panel1.Height - 20, 50 + 40 * j, 20);
int x, y, w, h;
grap.DrawString(m[j].ToString(), new Font("宋体", 8, FontStyle.Regular), new SolidBrush(Color.Black), 76 + 60 * j, panel1.Height - 16);
x = 78 + 60 * j;//横坐标距离远点的距离
if (j == 0)
y = panel1.Height - 20 - Convert.ToInt32((Convert.ToDouble(_biaozhun) * 15));
else
y = panel1.Height - 20 - Convert.ToInt32((Convert.ToDouble(_zuizhong) * 15));
w = 24;//柱体宽度
if (j == 0)
h = Convert.ToInt32(Convert.ToDouble(_biaozhun) * 15);
else
h = Convert.ToInt32(Convert.ToDouble(_zuizhong) * 15);
grap.FillRectangle(new SolidBrush(Color.FromArgb(56, 129, 78)), x, y, w, h);
panel1.BackgroundImage = bitM;
如何编写读取一对坐标的代码并检查给定点是不是在一个圆内和一个矩形外?
【中文标题】如何编写读取一对坐标的代码并检查给定点是不是在一个圆内和一个矩形外?【英文标题】:How to write a code that reads a pair of coordinates and checks for given point if it is within a circle and out of a rectangle?如何编写读取一对坐标的代码并检查给定点是否在一个圆内和一个矩形外? 【发布时间】:2017-06-30 10:31:55 【问题描述】:我是新来的。我尝试学习 C# 的基础知识,那是我的第一语言。我在互联网上发现了一个让我发疯的任务。我认为主要是数学部分给我带来了麻烦。我希望任何人都可以帮助我。这是任务:
编写一个程序,读取一对坐标 x 和 y,并使用表达式检查给定点 (x, y) 是否在圆 K(1, 1, 1.5) 内和矩形外R(顶部=1,左侧=-1,宽度=6,高度=2)。
输入
您将在输入的两行收到一对坐标 - 在第一行您将找到 x,在第二行 - y。
输出
如果点在圆内,则在圆内打印,如果在外,则在圆外。如果该点在矩形内部,则打印一个空格,然后在矩形内部打印,否则在矩形外部打印。有关视觉描述,请参阅示例测试。 约束
坐标 x 和 y 始终是 [-1000, 1000] 范围内的有效浮点数。
到目前为止我已经这样做了:
static void Main()
double x = double.Parse(Console.ReadLine());
double y = double.Parse(Console.ReadLine());
double centerx = 1;
double centery = 1;
double r = 1.5;
double widthR = 6;
double HighR = 2;
double topY = 0 + (HighR / 2);
double rightX = 0 + (widthR / 2);
double bottomY = 0 - (HighR / 2);
double leftX = 0 - (widthR / 2);
double rectanglePointX = x - (-1);
double rectanglePointY = y - 1;
bool IsInsideC = (x - centerx) * (x - centerx) + (y - centery) * (y - centery) <= r * r;
bool IsInsideR = ((rectanglePointY< topY) && (rectanglePointY > bottomY) && (rectanglePointX < rightX) && (rectanglePointX > leftX));
if (IsInsideC ==false && IsInsideR== false)
Console.WriteLine("outside circle outside rectangle");
else if (IsInsideC == true && IsInsideR == true)
Console.WriteLine("inside circle inside rectangle");
else if (IsInsideC == false && IsInsideR == true)
Console.WriteLine("otside circle inside rectangle");
else
Console.WriteLine("inside circle outside rectangle");
提前致谢!
【问题讨论】:
代码有什么问题? 你还没有说出问题所在! 【参考方案1】:请提取方法,保持你的解决方案简单,不要重复自己:
private static bool IsWithinRectangle(double x, double y,
double left, double top, double width, double height)
// y should be below the top - y <= top and above the bottom: y >= top - height
return (x >= left) && (x <= left + width) &&
(y <= top) && (y >= top - height);
private static bool IsWithinCircle(double x, double y,
double centerX, double centerY, double r)
return (x - centerX) * (x - centerX) + (y - centerY) * (y - centerY) <= r * r;
然后使用这些方法:
double pointX = ...
double pointY = ...
if (!IsWithinRectangle(pointX, pointY, ...) &&
IsWithinCircle(pointX, pointY, ...))
...
测试:
// Circle:
double centerx = 1;
double centery = 1;
double r = 1.5;
// Rectangle:
double left = -1;
double top = 1;
double width = 6;
double height = 2;
// Point to test:
double x = 2.5;
double y = 2.0;
string rectTest = IsWithinRectangle(x, y, left, top, width, height)
? "within rect"
: "outside rect";
string circleTest = IsWithinCircle(x, y, centerx, centery, r)
? "within circle"
: "outside circle";
Console.Write(string.Join(" & ", circleTest, rectTest));
结果:
outside circle & outside rect
【讨论】:
它很好地定义了坐标是否在圆内,但它在矩形内会产生一些错误。我遇到了同样的问题。 @Julian Docev:请提供一个反例(“...它在矩形内产生一些错误...”);我建议一个点 (x, y
) 在矩形内当且仅当 x
在 [left..left+with]
范围内且 y
在 [top..top+height]
范围内
在任务中检查结果。圆环还可以,但矩形并不总是。 ;x=2.5 y =2 - 外圆外矩形; x=0 y = 1 - 矩形内圆内; x= 2.5 y = 1 - 矩形内圆内; x= 1 y = 2 - 内圆外矩形。
@Julian Docev:我明白了,我们必须从top
中减去:(y <= top) && (y >= top - height)
:y 应该低于 @987654332 @
你能更好地解释一下整个方程式吗,因为我不确定我是否理解;)【参考方案2】:
首先您必须了解这不是一个特定于编程的问题。 要创建程序,请按以下步骤操作:
在纸上手动写下解决此数学问题的每一步。 检查重复的步骤并将它们放在一起。 编写一个简单的伪代码(英文程序的简单表示)。 用任何编程语言转换伪代码。通过这种方法,您几乎可以将程序中的所有数学问题转换为任何语言。
要求:
-
对问题概念的理解(这里是如何在纸上数学中解决同样的问题)
基本编程知识
希望这会有所帮助。 :-)
【讨论】:
是的,数学不是我最强的一面,这就是我寻求帮助的原因:)【参考方案3】:我认为这就是你所需要的 - Equation for testing if a point is inside a circle
如果这没有帮助,这里是另一个 - Check if point is inside a circle
这里是如何检查矩形 - Finding whether a point lies inside a rectangle or not
【讨论】:
以上是关于c# 绘制正负坐标轴,代码怎么编写?最好详细点的主要内容,如果未能解决你的问题,请参考以下文章
C#界面编程,现在数据库里有成千上万个点的坐标,想利用这些坐标绘制曲线,望高手给点意见