Задать вопрос
Chefranov
@Chefranov
Новичок

Как построить треугольник?

Переписываю старую программу с qBasic на VB.NET и имеется код который строит треугольник и внутри него ставит точку и к этой точке проводит линии от сторон треугольника (см. скрин).

3020 CLS
3030 SCREEN 2
3040 SS=SQR(3)/2
3050 CC=.5
3060 X1=100:Y1=160
3070 X2=400:Y2=160
3080 X3=250:Y3=160-300*SS/2.3
3090 LINE(X1,Y1)-(X2,Y2)
3100 LINE(X1,Y1)-(X3,Y3)
3110 LINE(X2,Y2)-(X3,Y3)
3130 XAB=100+300*X212*CC:YAB=160-(300*X212*SS)/2.3
3140 XAC=100+300*X313:YAC=160
3150 XBC=400-300*X223*CC:YBC=160-(300*X223*SS)/2.3
3160 XABC=100+300*X2123*CC+300*X3123:YABC=160-(300*X2123*SS)/2.3
3170 LINE(XAB,YAB)-(XABC,YABC)
3180 LINE(XAC,YAC)-(XABC,YABC)
3190 LINE(XBC,YBC)-(XABC,YABC)
3200 RETURN

59eb7c9d361c0246193669.png

Так вот, не понимаю для чего эти строки и вообще запутался
3040 SS=SQR(3)/2
3050 CC=.5
Y3=160-300*SS/2.3


Сам треугольник это система, например, BaO - Al2O3 - SiO2. Каждая сторона треугольника это содержание оксида в системе (A-B, B-C, A-C), а точка внутри показывает какое содержание всех компонентов (A-B-C).
  • Вопрос задан
  • 798 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
@Mercury13
Программист на «си с крестами» и не только
Этот код вычисляет координату верхней вершины треугольника.

2,3 — полученная обмерами конкретного экрана пропорция пикселя. Расчётная 2,4 = (640·3) / (200·4), и заметно, что на эмуляторе треугольник слегка сплюснутый.
√3 / 2 — высота треугольника при единичном основании.
Координаты вершин (100, 160), (400, 160) [основание соответственно 300]. Какие (X, Y) у третьей?
X3 — среднее между ними, основание 300, ну а Y3 = 160 − 300·(√3 / 2) / aspect.

Первое, что вам придётся сделать на современном компьютере — избавиться от коэффициента 2,3: пиксели-то сейчас квадратные. Затем как можно больше констант сделать производными. Например:
TriangleX = 100
TriangleY = 50
TringleSide = 300
Sqr32 = Sqr(3) / 2
TriangleHeight = TriangleSide * Sqr32
X1 = TriangleX
Y1 = TriangleY + TriangleHeight
X3 = X1 + TriangleSide
Y3 = Y1
X2 = X1 + TriangleSide / 2
Y2 = TriangleY

UPD. Я поменял местами X2/X3 так, чтобы оно сходилось с экраном. И ты не забудь. То есть, 400 — теперь это будет X3!!!
Ответ написан
honor8
@honor8
Принципы быстродействия VBA в описании
В строке 3040 находится коэффициент, который либо делает треугольник визуально равносторонним с учётом разрешения и пропорций осей, указанных в строке 3030 (на что намекает шрифт); либо треугольник является равнобедренным (но глазом это не заметно).
Как заметил Mercury13, равносторонний треугольник имеет углы 60°. Проверка для X:Y = 1:1.
3060 X1=100:Y1=160		3060 X1=100:Y1=160		3060 X1=180:Y1=160
3070 X2=260:Y2=160		3070 X2=340:Y2=160		3070 X2=400:Y2=160
3080 X3=180:Y3=21.4		3080 X3=260:Y3=21.4		3080 X3=250:Y3=419.8
ЗЫ: Как посчитать Y3 написал в комментариях.
SS=SQR(3)/2 - медиана, она же высота равностороннего треугольника. Mercury13 меня поправил, спасибо.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
SS и CC - это просто вычисление констант для последующего использования в коде. Если посмотрите по коду, то увидите, что они ниже используются при вычислении координат.
SS = sqrt(3) / 2; // (корень из трех) / 2
CC = 0.5;
Ну а почему используются такие формулы - не в курсе, нужно смотреть теорию.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы