Как найти пересечение оси в пикселях - PullRequest
0 голосов
/ 27 сентября 2019

Я реализую два курсора с перекрестием, используя метки для диаграммы winforms после следующих уроков на YouTube.Я использую курсоры, чтобы найти значения на моем графике, но мне нужно найти максимальное и минимальное положения оси X, чтобы предотвратить исключение превышения диапазона

Мой подход состоял в том, чтобы найти пересечение порядка осичтобы найти минимум и максимум следующим образом:

Минимум: пересечение первичных осей X и Yaxis Макс: пересечение первичных осей X и Yaxis + ширина и высота.

Вот изображение точки, в которой я пытаюсь найти значение пикселя для

Точек, которые я пытаюсь найти, для значений пикселя

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

x0 = Convert.ToInt32 (chart1.Width * decimal.Divide (Convert.ToInt32 (chart1.ChartAreas [0] .Position.X), 100) + Convert.ToInt32 (Decimal.Divide (Convert.ToInt32 (chart1.Width * chart1.ChartAreas [0] .Position.Width chart1.ChartAreas [0] .InnerPlotPosition.Width chart1.ChartAreas [0] .InnerPlotPosition.X), 1000000))) - 10;x1 = Convert.ToInt32 (x0 + Convert.ToInt32 (Decimal.Divide (Convert.ToInt32 (chart1.Width * chart1.ChartAreas [0] .Position.Width * chart1.ChartAreas [0] .InnerPlotPosition.Width), 10000))) +10;y0 = Convert.ToInt32 (chart1.Height decimal.Divide (Convert.ToInt32 (chart1.ChartAreas [0] .Position.Y), 100) + Convert.ToInt32 (Decimal.Divide (Convert.ToInt32 (chart1.Height) chart1.ChartAreas [0] .Position.Height * chart1.ChartAreas [0] .InnerPlotPosition.Height * chart1.ChartAreas [0] .InnerPlotPosition.Y), 1000000))) - 15;y1 = Convert.ToInt32 (y0 + chart1.Height * decimal.Divide (Convert.ToInt32 (chart1.ChartAreas [0] .Position.Height * chart1.ChartAreas [0] .InnerPlotPosition.Height), 10000)) + 25;

0 голосов
/ 27 сентября 2019

Вы можете использовать функции Оси для преобразования между 3 системами координат диаграммы (пиксели, значения и позиции).

Значения, которые нужно искать, это, вероятно, значения Minimum и Maximum:

Axis ax = chart1.ChartAreas[0].AxisX;
Axis ay = chart1.ChartAreas[0].AxisY;

var x0 = (int)ax.ValueToPixelPosition(ax.Minimum);
var y0 = (int)ay.ValueToPixelPosition(ay.Minimum);
var x1 = (int)ax.ValueToPixelPosition(ax.Maximum);
var y1 = (int)ay.ValueToPixelPosition(ay.Maximum);

Вы можете изучить this и this для получения дополнительной информации о нахождении позиций пикселей на диаграмме.

Обратите внимание, что фактическое пересечение можно сместить, установив значения Axis.Crossing!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...