我正在使用C#为Computer Graphics类做一个项目,但是我遇到了OOP问题。
我需要将点数从世界坐标转换为视口坐标,反之亦然。
为此,我有3个班级:Point
,Window
,Polygon
和mainForm
。
我从鼠标坐标事件中获取视口坐标。
在Window
中我只有xmin / max和ymin / max的属性(用于确定mainform中的窗口/视口)。
在Polygon
中,我有list<Point> points;
在mainForm
上,将视口转换为世界坐标的方法,以及插入点的MouseDown
事件。
问题:
如何在列表中插入一个点?来自mainForm;
错误:
System.NullReferenceException:'对象引用未设置为对象的实例。' pol.points为空。
代码摘录:
Window World = new Window(-250, -250, 250, 250);
Window vp = new Window(0, 0, 500, 500);
Point pto = new Point();
Polygon pol = new Polygon();
public double x, y;
public double Yvp2W(int y, Window m, Window v)
{
return ((1 - (y - v.ymin) / (v.ymax - v.ymin)) * ((m.ymax - m.ymin) + m.ymin));
}
public double Xvp2W(int x, Window m, Window v)
{
return ((x - v.xmin) / (v.xmax - v.xmin)) * ((m.xmax - m.xmin) + m.xmin);
}
public void Axis(){
pto.x = Xvp2W(250, world, vp); //returns 125
pto.y = Yvp2W(0, world, vp); //returns 250
pol.points.Add(pto); //pol.pontos returns null <- THE ERROR
}
我错过了什么?
答案 0 :(得分:0)
如果points在使用之前为null,则需要创建PointsCollection
public void Axis(){
pto.x = Xvp2W(250, world, vp); //return 125
pto.y = Yvp2W(0, world, vp); //return 250
if(pol.points == null)
{
pol.points=new PointsCollection();
}
pol.points.Add(pto); //pol.pontos return null <- THE ERROR
}