![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Помогите пожалуйста найти ошибку...
Условие задачи таково, что нужно определить является ли 4-ехугольник с заданными координатами квадратом,ромбом или трапецией... Все случаи проверяются нормально, но не работает отрицание, когда 4-ехугольник не явялется квадратом,ромбом или трапецией. Помогите разобраться. Есть ли какие-нибудь замечанию по поводу оптимальности кода? Можно ли сократить кол-во проверок и тд? Код:
if (a=b) and (c=d) and (a=d) then begin if bd<>ac then edit9.text:=('Точки образуют ромб') else if bd=ac then edit9.text:=('Точки образуют квадрат') end else if (b<>d) or (a<>c) then begin if ((x3-x2)/(x4-x1)=(y3-y2)/(y4-y1)) or ((x1-x2)/(x4-x3)=(y1-y2)/(y4-y3)) then edit9.text:=('Точки образуют трапецию') else if (y3-y2=0) and (y4-y1=0) and (b<>d) then edit9.text:=('Точки образуют трапецию') else if (y1-y2=0) and (y4-y3=0) and (a<>c) then edit9.text:=('Точки образуют трапецию'); end else edit9.Text:=('Четырехугольник не является квадратом,ромбом или трапецией'); end; |
#2
|
||||
|
||||
![]() Попробую что-то упорядочить...
Код:
if ((a=b) and (c=d) and (a=d)) then begin//2 if bd<>ac then edit9.text:=('Точки образуют ромб') else edit9.text:=('Точки образуют квадрат'); end;//2 if ((b<>d) or (a<>c)) then begin//3 if ((x3-x2)/(x4-x1)=(y3-y2)/(y4-y1))or((x1-x2)/(x4-x3)=(y1-y2)/(y4-y3)) then edit9.text:=('Точки образуют трапецию'); if ((y3-y2=0) and (y4-y1=0) and (b<>d)) then edit9.text:=('Точки образуют трапецию'); if ((y1-y2=0) and (y4-y3=0) and (a<>c)) then edit9.text:=('Точки образуют трапецию'); end//3 else edit9.Text:=('Четырехугольник не является квадратом,ромбом или трапецией') end;//1 В начале был Бит, потом Байт и только потом появилось Слово... |
#3
|
|||
|
|||
![]() все, спасибо...
можете еще подсказать...как сделать так, чтобы изображение рисовалось в центре холста и координаты увеличивались...т.е. если я ввожу небольшие координаты (например 10, 10,15,15) фигура получается очень маленькая...а нужно, чтобы она была больше...где-то на 2/3 холста... использую Timage. Последний раз редактировалось inferno mf, 30.11.2009 в 20:55. |
#4
|
|||
|
|||
![]() Во первых, советую отказаться от TImage и взять лучше TPaintBox (дальнейших проблем будет меньше).
Вообще, я обычно для этой цели ввожу некий параметр FScale : Double, который отвечает за размерность картинки, а при отрисовке, умножаю все координаты на это значение. То есть, если FScale = 1,5 , то изображение будет на половину больше, если FScale = 0,5 , то наполовину меньше. А для центровки графика, достаточно вычислить смещение графика к центру, и при отрисовки прибавлять к координатам это смещение, к примеру: Height - высота области для рисования Width - ширина области для рисования hgt - высота графика wdt - ширина графика FX,FY - координаты смещения Код:
FX:=(Width div 2)-(wdt div 2); FY:=(Height div 2)-(hgt div 2); Код:
FX:=Round((Width/2)-(wdt/2)); FY:=Round((Height/2)-(hgt/2)); Код:
Rectangle(FX+Round(X1*FScale), FY+Round(Y1*FScale), FX+Round(X2*FScale), FY+Round(Y2*FScale)); Последний раз редактировалось Asinkrit, 01.12.2009 в 00:32. |